Erro método de inserção JSON

3 respostas
Z

Olá a todos!

Fiz um método que lê um retorno JSON, trata e tenta inserir os valores em um banco de dados.
Só que quando tento executar o método POST o sistema retorna o seguinte erro:

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

Meu método de inserção está da seguinte maneira:
@POST
	@Path("/inserir")
	@Consumes("application/json")
	public void createPedido(String stringJson){
		try {

			JSONObject json = new JSONObject(stringJson);
			JSONArray pedidoProduto = json.getJSONArray("pedidoProduto"); 

			this.dispositivo = dispositivoDAO.find(json.getInt("idDispositivo"));
			this.formaPagamento = formaPagamentoDAO.find(json.getInt("idFormaPagamento")); 
			this.pedido.setFormaPagamento(formaPagamento);
			this.pedido.setDispositivo(dispositivo);
			this.pedido.setTotal(json.getDouble("total")); 
			Date data = new Date();
			this.pedido.setDataPedido(new java.sql.Date(data.getTime())); 
			
			for(int i = 0; i < pedidoProduto.length(); i++){ 
				JSONObject j = pedidoProduto.getJSONObject(i);
				
				produto =  produtoDAO.find(j.getInt("idProduto"));
				((ItemPedido) itemPedido).setValor(json.getDouble("valor"));
				((ItemPedido) itemPedido).setQuantidade(j.getInt("quantidade"));
				((ItemPedido) itemPedido).setIdProduto(this.produto);
				((ItemPedido) itemPedido).setIdPedido(this.pedido);
			}
			
			this.pedido.setItensPedido(itemPedido);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		
		pedidoDAO.beginTransaction();
		pedidoDAO.save(this.pedido);
		pedidoDAO.commitAndCloseTransaction();		
	}
O JSON que estou enviando está da seguinte forma:
{"pedidoProduto":[{"observacao":"android.widget.EditText@4267da70","nomeProduto":"X-Egg","valor":11.85,"quantidade":2,"idPedidoProduto":49,"idProduto":8},{"observacao":"android.widget.EditText@426d4260","nomeProduto":"Pepsi","valor":1.8,"quantidade":1,"idPedidoProduto":50,"idProduto":4}],"idFormaPagamento":1,"total":13.65,"idDispositivo":14}
Pelo que eu entendi minha codificação não está reconhecendo o JSON que estou enviando, mas eu não consigo encontrar o erro. Alguém saberia me dizer onde estou falhando? Agradeço desde já por qualquer ajuda!

3 Respostas

Z
Galera, realizando o debug aqui percebi que o erro está na linha
this.dispositivo = dispositivoDAO.find(json.getInt("idDispositivo"));
O valor do idDispositivo está vindo certo, e o registro também existe no banco. Alguém saberia me dizer o que está errado?

retorno do erro:

java.lang.NullPointerException
	at br.com.unip.menudroidweb.dao.DAOFactory.find(DAOFactory.java:73)
	at br.com.unip.menudroidweb.dao.DispositivoDAO.find(DispositivoDAO.java:1)
	at br.com.unip.menudroidweb.facade.PedidoFacade.createPedido(PedidoFacade.java:54)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:167)
	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Nov 18, 2012 4:44:57 PM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.IllegalArgumentException: attempt to create create event with null entity
	at org.hibernate.event.spi.PersistEvent.<init>(PersistEvent.java:44)
	at org.hibernate.event.spi.PersistEvent.<init>(PersistEvent.java:37)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:819)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:823)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:865)
	at br.com.unip.menudroidweb.dao.DAOFactory.save(DAOFactory.java:59)
	at br.com.unip.menudroidweb.dao.PedidoDAO.save(PedidoDAO.java:1)
	at br.com.unip.menudroidweb.facade.PedidoFacade.createPedido(PedidoFacade.java:78)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:167)
	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Nov 18, 2012 4:44:57 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Jersey REST Service] in context with path [/menuDroidWeb] threw exception
java.lang.IllegalArgumentException: attempt to create create event with null entity
	at org.hibernate.event.spi.PersistEvent.<init>(PersistEvent.java:44)
	at org.hibernate.event.spi.PersistEvent.<init>(PersistEvent.java:37)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:819)
	at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:823)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:865)
	at br.com.unip.menudroidweb.dao.DAOFactory.save(DAOFactory.java:59)
	at br.com.unip.menudroidweb.dao.PedidoDAO.save(PedidoDAO.java:1)
	at br.com.unip.menudroidweb.facade.PedidoFacade.createPedido(PedidoFacade.java:78)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:167)
	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Agradeço desde já!

Z

Senhores,

Só para fornecer mais informações. Eu tenho um método que chama esse find, e eu publiquei ele.
Quando tento acessa-lo o sistema retorna normalmente a informação, então o erro é apenas nessa codificação que coloquei acima.

Alguém saberia me dizer onde estou falhando?? Já tentei de tudo aqui e o método simplesmente não funciona.
Ele consegue tratar normalmente a informação do JSON, cria o objeto, separa nos valores certinho.
Só que quando tento passar o ID para ele consultar e retornar o objeto, ocorre o magnífico erro de NullPointer…

Agradeço desde já pela ajuda!!!

Z

Galera, achei o programa.
Era falha minha mesmo.

Esqueci de iniciar a conexão com o banco :roll:

Ai fica difícil querer buscar algo mesmo

Criado 18 de novembro de 2012
Ultima resposta 19 de nov. de 2012
Respostas 3
Participantes 1