package br.com.ecodetech.alunoweb.integracao; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.annotation.Resource; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.transaction.UserTransaction; import org.apache.log4j.Logger; import org.primefaces.json.JSONArray; import org.primefaces.json.JSONException; import org.primefaces.json.JSONObject; import br.com.ecodetech.alunoweb.interceptor.Transactional; import br.com.ecodetech.alunoweb.model.bean.Cliente; import br.com.ecodetech.alunoweb.model.dao.ClienteDAO; /** * Servlet implementation class Entrada */ @WebServlet(name = "receber-json", urlPatterns = { "/receber-json" }) public class Entrada extends HttpServlet { private static final long serialVersionUID = 1L; @Inject private transient Logger logger; @Inject private ClienteDAO dao; @Resource private UserTransaction transaction; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ @Transactional protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Callback for JSONP responses. String callback = request.getParameter("callback"); // MIME type String mime = request.getParameter("mime"); // Access-Control-Allow-Origin String allow_origin = request.getParameter("allow_origin"); // 1. get received JSON data from request BufferedReader br = new BufferedReader(new InputStreamReader( request.getInputStream())); String jsonRecebido = ""; if (br != null) { jsonRecebido = br.readLine(); } logger.info(jsonRecebido); try { // pega o objeto "lista" JSONObject jsonObject = new JSONObject(jsonRecebido); logger.info(jsonObject); JSONArray list = jsonObject.getJSONArray("list"); logger.info("list: " + list); logger.info("list.length(): " + list.length()); transaction.begin(); logger.info("Abertura de transação " + transaction); for (int a = 0; a < list.length(); a++) { JSONObject alunoJson = list.getJSONObject(a); logger.info("aluno: " + alunoJson); JSONArray listaDeAlunos = alunoJson.getJSONArray("aluno"); for (int i = 0; i < listaDeAlunos.length(); i++) { JSONObject aluno = listaDeAlunos.getJSONObject(i); Cliente cliente = new Cliente(); cliente.setIdMobile(aluno.getLong("id")); cliente.setNome(aluno.getString("nome")); cliente.setTelefone(aluno.getString("telefone")); cliente.setEmail(aluno.getString("email")); dao.cadastrar(cliente); logger.info("cliente cadastrado: " + cliente); } } logger.info("Encerramento de transação " + transaction); transaction.commit(); } catch (Exception e1) { e1.printStackTrace(); } // Resposta... JSONObject json = new JSONObject(); String json_text = null; try { json.put("ip", request.getRemoteAddr()); if (json_text == null) { json_text = json.toString(3); } if (callback != null) { json_text = callback + "(" + json_text + ");"; } } catch (JSONException e) { e.printStackTrace(); } if ("false".equals(allow_origin)) { // Do nothing, the user does not want this header. // Make a note in logging, since this is a very unusual request. System.out .println("Access-Control-Allow-Origin header turned off. User's web application may not work."); } else { // By default, we set access-control-allow-origin to *, which // means that all web apps regardless of domain may access // and use our services. response.setHeader("Access-Control-Allow-Origin", "*"); } String content_type = getContentType(mime, callback); response.setContentType(content_type); // System.out.println("Content Type: " + content_type); // Print out the JSON. response.getWriter().println(json_text); // System.out.println(json_text); } private String getContentType(String mime, String callback) { String content_type = "text/plain"; if ("1".equals(mime)) { content_type = "application/json"; } else if ("2".equals(mime)) { content_type = "application/javascript"; } else if ("3".equals(mime)) { content_type = "text/javascript"; } else if ("4".equals(mime)) { content_type = "text/html"; } else if ("5".equals(mime)) { content_type = "text/plain"; } else { // The user didn't set up a requested MIME type. We'll set it for // them. if (callback == null) { // If no callback is set content_type = "application/json"; } else { // If a callback is set content_type = "application/javascript"; } }// end else if content_type is null or does not match an accepted // value. return content_type; } }