Re: Axis2 / Java: java.lang.NullPointerException at org.apache.axis2.context.MessageContext.isFault(MessageContext.java:4304)
Alex Borschenko <[email protected]> Fri, 31 Aug 2018 01:54:08 +0300
| Newsgroups | gmane.text.xml.axis.user |
|---|---|
| Message-ID | <[email protected]> |
On 8/31/2018 12:04 AM, robertlazarski wrote: > > > On Thu, Aug 30, 2018 at 2:46 PM Alex Borschenko > <[email protected] <mailto:[email protected]>> wrote: > > Hi All! > > I have deployed archive of services which consume/produce XMLs and > now I'm trying to add one more service who will consume/produce JSON. > It is simple service which operates with POJOs. > > To enable JSON operations I added to axis2.xml: > > <messageFormatter contentType="application/json" > class="org.apache.axis2.json.gson.JsonFormatter" /> > > <messageBuilder contentType="application/json" > class="org.apache.axis2.json.gson.JsonBuilder" /> > > In services XML I have declared my service: > > <service name="LoginWSManager"> > <Description> > This is a sample service to test json implementation > </Description> > <messageReceivers> > <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" > <http://www.w3.org/ns/wsdl/in-out> > class="org.apache.axis2.json.gson.rpc.JsonRpcMessageReceiver" /> > <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" > <http://www.w3.org/ns/wsdl/in-only> > class="org.apache.axis2.json.gson.rpc.JsonInOnlyRPCMessageReceiver"/> > </messageReceivers> > <parameter name="ServiceClass" > locked="false">security.LoginWSManager</parameter> > </service> > > Service code: > > public LoginResponseWSBean login(String email, String password)throws Exception { > Application.logger().info("Logging in user email: " + email); > > final LoginResponseWSBean loginResponseWSBean =new LoginResponseWSBean(); > try { > loginBusinessLogic.login(email, password); > }catch (Exception e) { > loginResponseWSBean.setLoggedIn(false); > loginResponseWSBean.setMessage(e.getMessage()); > loginResponseWSBean.setStackTrace(ExceptionUtils.getStackTrace(e)); > Application.logger().warning(String.format("Returning: %s", loginResponseWSBean)); > return loginResponseWSBean; > } > loginResponseWSBean.setLoggedIn(true); > loginResponseWSBean.setMessage(email +" logged in successfully!"); > > return loginResponseWSBean; > } > > public class LoginResponseWSBeanimplements Serializable { > > private boolean loggedIn =false; > private Stringmessage =""; > private StringstackTrace =""; > > public LoginResponseWSBean(boolean loggedIn, String message, String stackTrace) { > this.loggedIn = loggedIn; > this.message = message; > this.stackTrace = stackTrace; > } > > public LoginResponseWSBean() { > > } > .... > } > > > When I call it by this command: > > curl -X POST -H "Content-Type: application/json" -d > "{'login':[{'email':'[email protected]'}, {'password':'secret'}]}" > <mailto:%7B%27login%27:[%7B%27email%27:%[email protected]%27%7D,%7B%27password%27:%27secret%27%7D]%7D> > http://localhost:8080/axis2/services/LoginWSManager/login > > It responds with this message: > {"Fault":{"faultcode":"soapenv:Server","faultstring":"java.lang.NullPointerException","detail":""}} > > In tomcat logs I can see this stacktrace: > > 30-Aug-2018 23:38:09.137 INFO [http-nio-8080-exec-9] > org.apache.catalina.core.StandardWrapperValve.invoke [ERROR] > java.lang.NullPointerException > at > org.apache.axis2.context.MessageContext.isFault(MessageContext.java:4304) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.sendUsingOutputStream(CommonsHTTPTransportSender.java:289) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:244) > at > org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431) > at > org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:43) > at > org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:106) > at > org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:169) > at > org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:178) > at > org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:163) > at > javax.servlet.http.HttpServlet.service(HttpServlet.java:648) > at > javax.servlet.http.HttpServlet.service(HttpServlet.java:729) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) > at > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) > at > org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) > at > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) > at > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > at java.lang.Thread.run(Thread.java:745) > > Please help me find out why it is not processing > LoginResponseWSBean response object as expected and generates NPE. > Thanx! > > Alex > > > I am planning on a patch for this issue as I am using GSON / Axis2 > quite a bit in my day job right now. There are a few things I want to > discuss with the Axis2 dev team here, including this NPE. > > In this case I made this change in the MessageContext.java source. You > would have to compile from source to fix it in the short term. I don't > know why the Envelope is null here. Making this change had no effect > on my existing soap based services but it did fix the GSON services. > > public boolean isFault() { > if (getEnvelope() == null) { > log.warn(getLogIDString() + ": ****WARNING**** " + > myClassName + > " , found null envelope, returning false"); > return false; > } > return getEnvelope().hasFault(); > } > > I was wondering if anyone is using GSON with axis2, the docs are > something I plan on improving soon and good to know someone else is > using this code. > > Regards, > Robert Hi Robert! Your solution helped :) I was already about to try this on my own and your suggestion made me stronger in my decision :) Thanx, mate! Alex.