Hello,
1. I tried the samples.encoding.TestSer example and this worked fine.
2. Next, I changed the samples.userguide5 example to use the Data custom mapping
- I added a property data to the Order. bean with getter and setter
- added this to Client.java:
QName qnd = new QName("urn:BeanService","Data");
call.registerTypeMapping(samples.encoding.Data.class, qnd,
new samples.encoding.DataSerFactory(),
new samples.encoding.DataDeserFactory());
- added this to deploy.wsdd:
<typeMapping qname="myNS:Data" xmlns:myNS="urn:BeanService"
languageSpecificType="java:samples.encoding.Data"
serializer="samples.encoding.DataSer"
deserializer="samples.encoding.DataDeserFactory"/>
3. Next I deployed the service
Then, the client gives this error:
Error : java.lang.NullPointerException
What am I doing wrong?
Best regards,
Kris
Request:
POST /axis/servlet/AxisServlet HTTP/1.0 Content-Length: 1772 Host: localhost
Content-Type: text/xml; charset=utf-8 SOAPAction: "" <?xml version="1.0"
encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
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>
<ns1:processOrder xmlns:ns1="OrderProcessor">
<arg1 href="#id0"/>
</ns1:processOrder>
<multiRef id="id0" SOAP-ENC:root="0" xsi:type="ns2:Order"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="urn:BeanService">
<customerName xsi:type="xsd:string">Glen Daniels</customerName>
<shippingAddress xsi:type="xsd:string">275 Grove Street, Newton,
MA</shippingAddress>
<itemCodes xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[2]">
<item xsi:type="xsd:string">mp3jukebox</item>
<item xsi:type="xsd:string">1600mahBattery</item>
</itemCodes>
<quantities xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:int[2]">
<item xsi:type="xsd:int">1</item>
<item xsi:type="xsd:int">4</item>
</quantities>
<data href="#id1"/>
</multiRef>
<multiRef id="id1" SOAP-ENC:root="0" xsi:type="ns3:Data" xmlns:ns3="urn:BeanService"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<stringMember xsi:type="xsd:string">String member</stringMember>
<floatMember xsi:type="xsd:float">1.23</floatMember>
<dataMember href="#id2"/>
</multiRef>
<multiRef id="id2" SOAP-ENC:root="0" xsi:type="ns4:Data" xmlns:ns4="urn:BeanService"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<stringMember xsi:type="xsd:string">another str member</stringMember>
<floatMember xsi:type="xsd:float">4.56</floatMember>
<dataMember xsi:nil="true"/>
</multiRef>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Response:
HTTP/1.0 500 Internal Server Error Content-Type: text/xml; charset=utf-8
Content-Length: 3330 Servlet-Engine: Tomcat Web Server/3.2.3 (JSP 1.1; Servlet 2.2;
Java 1.3.1; Windows 2000 5.0 x86; java.vendor=Sun Microsystems Inc.) <?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>
<SOAP-ENV:faultcode
xmlns:ns1="http://xml.apache.org/axis/">ns1:Server.userException</SOAP-ENV:faultcode>
<SOAP-ENV:faultstring>java.lang.NullPointerException</SOAP-ENV:faultstring>
<SOAP-ENV:detail>
<ns2:stackTrace
xmlns:ns2="http://xml.apache.org/axis/">java.lang.NullPointerException
at samples.encoding.DataDeser.onStartChild(DataDeser.java:59)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:789)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:197)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:444)
at
org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:332)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:802)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:197)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:444)
at
org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:332)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:802)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:197)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:444)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:118)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:142)
at
org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:114)
at
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:254)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:151)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:118)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:287)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:535)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
at org.apache.tomcat.core.Handler.service(Handler.java:287)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:484)
</ns2:stackTrace>
</SOAP-ENV:detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I checked with the debugger and the exception is thrown at the moment that I step into
line 59.
<snippet DataDeser.java>
55: // These can come in either order.
56: Deserializer dSer = context.getDeserializerForType(typeQName);
57: try {
58: FieldTarget ft = new FieldTarget(value, localName);
59: dSer.registerValueTarget(ft);
60: } catch (NoSuchFieldException e) {
61: throw new SAXException(e);
62: }
</snippet>