You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by bu...@apache.org on 2002/08/14 17:47:34 UTC

DO NOT REPLY [Bug 11695] New: - java message provider return serialization error

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11695>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11695

java message provider return serialization error

           Summary: java message provider return serialization error
           Product: Axis
           Version: beta-3
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Serialization/Deserialization
        AssignedTo: axis-dev@xml.apache.org
        ReportedBy: mark.sullivan@nav-international.com


using the following code with the message provider causes a
NullPointerException:

public Element[] SubmitInvoice(Vector elems) {

 Element[] response = new Element[2];
	 
	  try { 
			response[0] = new
SOAPBodyElement(XMLUtils.StringToElement("","Status",
"ACCEPTED!")).getAsDOM();
	  } catch (Exception e){
		  log.error(e.getMessage());
	//  throw AxisFault.makeFault(e);
	  }	
	  return response;

}

notice that response is being declared as a vector of size two, but i'm only
using the first position. This causes the following exception:


  <?xml version="1.0" encoding="UTF-8" ?> 
- <SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <SOAP-ENV:Body>
- <SOAP-ENV:Fault>
  <faultcode
xmlns:ns1="http://xml.apache.org/axis/">ns1:Server.userException</faultcode>

  <faultstring>java.lang.NullPointerException</faultstring> 
- <detail>
  <ns2:stackTrace
xmlns:ns2="http://xml.apache.org/axis/">java.lang.NullPointerException at
org.apache.axis.message.MessageElement.<init>(MessageElement.java(Compiled
Code)) at
org.apache.axis.message.SOAPBodyElement.<init>(SOAPBodyElement.java(Compiled
Code)) at
org.apache.axis.providers.java.MsgProvider.processMessage(MsgProvider.java(C
ompiled Code)) at
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:262) at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:
71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java(Compiled
Code)) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:121) at
org.apache.axis.server.AxisServer.invoke(AxisServer.java:288) at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:576) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:247) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193) at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:243) at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66) at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:190) at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66) at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180
) at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66) at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java:170) at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64) at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170
) at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64) at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468) at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64) at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:174) at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66) at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java(
Compiled Code)) at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java(Comp
iled Code)) at java.lang.Thread.run(Thread.java:498)</ns2:stackTrace> 
  </detail>
  </SOAP-ENV:Fault>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

which is pretty cryptic to debug considering there is no mention of the
actual service class in which that method is called. If you declare the
vector as only having one element, then there is no error. I realize that
this isn't necessarily a bug, but it maybe should check before it creates
the new SOAPBodyElement.

Here's a code snippet from
org.apache.axis.providers.java.MsgProvider.processMessage:

    // We know we have one param.  OK, is it a Vector?
            if (params[0] == Vector.class) {
                // Yes, invoke away!
                argObjects[0] = bodies ;
                Element[] result = (Element[]) method.invoke( obj,
argObjects );
                if ( result != null ) {
                    for ( int i = 0 ; i < result.length ; i++ )
                        resEnv.addBodyElement( new
SOAPBodyElement(result[i]));
                }
                return ;


which should probably be changed to 

		  if ( result != null ) {
                    for ( int i = 0 ; i < result.length ; i++ ){
				** if(result[i] != null) **
                        	resEnv.addBodyElement( new
SOAPBodyElement(result[i]));
			  }
                }
                return ;


or something along those lines.