You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by "Zekl, Andreas (Student Assistant)" <An...@softwareag.com> on 2002/08/01 17:31:29 UTC

Null Reference Problem

Hi,
I am running xml-axis-beta3 and xml-axis-beta2 on a Jakarta Tomcat Version
4.0.

My Web Service should simply reply the objects i send to it.

So i defined a Class which i send:

public class SOAPStruct {		
	private String varString;
	private int varInt;
	private int[] varIntArray;
	private float varFloat;
	private float[][] varFloatDoubleArray;
	private SOAPStruct varSoapStruct;// = null;

	public SOAPStruct() {}
	
	public SOAPStruct(String sVar, int iVar, int[] iVarArray, float
fVar, float[][] fVarDoubleArray, SOAPStruct sStructVar) {
		this.varString = sVar;
		this.varInt = iVar;
		this.varIntArray = iVarArray;
		this.varFloat = fVar;
		this.varFloatDoubleArray = fVarDoubleArray;
		this.varSoapStruct = sStructVar;
	}

	.
	.
	.
}

The WSDl looks like this:
<schema targetNamespace="http://www.soapinterop.org/Interop"
xmlns="http://www.w3.org/2001/XMLSchema">
  	<import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> 
	- <complexType name="SOAPStruct">
		- <sequence>
  			<element name="varString" nillable="true"
type="xsd:string" /> 
  			<element name="varInt" type="xsd:int" /> 
  			<element name="varIntArray" nillable="true"
type="intf:ArrayOf_xsd_int" /> 
  			<element name="varFloat" type="xsd:float" /> 
  			<element name="varFloatDoubleArray" nillable="true"
type="intf:ArrayOfArrayOf_xsd_float" /> 
  			<element name="varSOAPStruct" nillable="true"
type="tns1:SOAPStruct" /> 
  		</sequence>
  	</complexType>
  	<element name="SOAPStruct" nillable="true" type="tns1:SOAPStruct" />

</schema>

I create the class and set sStructVar to null (when i call the constructor).
	SOAPStruct inSoapStruct = new SOAPStruct("SoapStruct", 5, new int[]
{5,6}, 6.2f, new float[][] { new float[] {6.2f, 6.3f}, new float[] {7.2f,
7.3f}}, null);
            		
	SOAPStruct outSoapStruct = (SOAPStruct) call.invoke(new Object[]
{inSoapStruct});


The Soap Message looks like this:

<?xml version="1.0" encoding="UTF-8" ?> 
- <soapenv:Envelope
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-	instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
- <soapenv:Body>
	- <ns1:echoSOAPStruct xmlns:ns1="Round1">
  		<arg0 href="#id0" /> 
  	  </ns1:echoSOAPStruct>
	- <multiRef id="id0" SOAP-ENC:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="ns2:SOAPStruct" 		xmlns:ns2="Round1">
  		<varString xsi:type="xsd:string">SoapStruct</varString> 
  		<varInt xsi:type="xsd:int">5</varInt> 
	    - <varIntArray xsi:type="SOAP-ENC:Array"
SOAP-ENC:arrayType="xsd:int[2]">
  			<item>5</item> 
  			<item>6</item> 
  		</varIntArray>
  	      <varFloat xsi:type="xsd:float">6.2</varFloat> 
		- <varFloatDoubleArray xsi:type="SOAP-ENC:Array"
SOAP-ENC:arrayType="xsd:float[2,2]">
  			<item xsi:type="xsd:float">6.2</item> 
  			<item xsi:type="xsd:float">6.3</item> 
  			<item xsi:type="xsd:float">7.2</item> 
  			<item xsi:type="xsd:float">7.3</item> 
  		</varFloatDoubleArray>
  		<varSOAPStruct xsi:nil="true" /> 
  	</multiRef>
  </soapenv:Body>
</soapenv:Envelope>

Everything looks fine but the server cannot handle the null type. I got the
following error:
 
<?xml version="1.0" encoding="UTF-8" ?> 
- <soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>

- <soapenv:Fault>
  <faultcode
xmlns:ns1="http://xml.apache.org/axis/">ns1:Server.userException</faultcode>

  <faultstring>org.xml.sax.SAXException: Bad types (null -> class
Servers.Round1.SOAPStruct)</faultstring> 

- <detail>
  <ns2:stackTrace
xmlns:ns2="http://xml.apache.org/axis/">org.xml.sax.SAXException: Bad types
(null -> class Servers.Round1.SOAPStruct) at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:207) at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
tionContextImpl.java:857) at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:199)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
644) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:201)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:259) at
org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:1
61) at
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:289) at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:
71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150) at
org.apache.axis.SimpleChain.invoke(SimpleChain.java:120) at
org.apache.axis.server.AxisServer.invoke(AxisServer.java:312) at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:577) at 
	.
	.
	.
  </ns2:stackTrace> 
  </detail>
  </soapenv:Fault>
  </soapenv:Body>
  </soapenv:Envelope>

Maybe someone can give me a hint where the problem is.

Sincerely yours
	Andreas Zekl