Problem with Deserialzing Arrays by Axis
sidhartha Nov 8, 2004 1:03 AMHello,
I am getting the following error:
" org.xml.sax.SAXException: SimpleDeserializer encountered a
child element, which is NOT expected, in something it was trying
to deserialize "
I am using AXIS 1.1,Jboss4.0 and JbossWs with doc/lit Style.
I have written a small HelloWorld application that has one method 'printMessage' that takes an array of 'Message'(user defined class) as an argument.
Without using the array everything works fine .
However when I add my customized type's Array I get the above error.
Below is a summary of what was done:
STEP - 1 :- Created a impl class and Client class
=========
-----------------------------------------------------------------------------------
HelloWorld_Impl.java
-----------------------------------------------------------------------------------
package com.myapp;
import java.rmi.RemoteException;
import javax.xml.rpc.*;
import javax.xml.rpc.server.ServiceLifecycle;
public class HelloWorld_Impl implements HelloWorld, ServiceLifecycle
{
public String printMessage(ArrayOfMessage arrayOfMessage)
{
System.out.println("In printMessage...");
return arrayOfMessage.toString();
}
}
-----------------------------------------------------------------------------------
HelloWorldClient.java
-----------------------------------------------------------------------------------
package com.myapp;
public class HelloWorldClient
{
public static void main(String args[]) throws Exception
{
HelloWorldServiceLocator locator = new HelloWorldServiceLocator();
Message message = new Message();
message.setMessage("HelloWorld");
Message array[] = { message };
ArrayOfMessage arrayOfMessage = new ArrayOfMessage();
arrayOfMessage.setMessages(array);
locator.getHelloWorld().printMessage(arrayOfMessage);
}
}
STEP - 2 :- configured jaxrpc-mapping.xml,webservices.xml,web.xml
==========
-----------------------------------------------------------------------------------
jaxrpc-mapping.xml
-----------------------------------------------------------------------------------
<?xml version='1.0' encoding='UTF-8' ?>
<java-wsdl-mapping
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns1="http://ekta.com"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd"
version="1.1">
<package-mapping>
<package-type>com.myapp</package-type>
http://ekta.com/HelloWorld
</package-mapping>
<package-mapping>
<package-type>com.myapp</package-type>
http://ekta.com
</package-mapping>
<java-xml-type-mapping>
<java-type>com.myapp.ArrayOfMessage</java-type>
<root-type-qname>ns1:in0</root-type-qname>
<qname-scope>element</qname-scope>
</java-xml-type-mapping>
<java-xml-type-mapping>
<java-type>java.lang.String</java-type>
<root-type-qname>ns1:printMessageReturn</root-type-qname>
<qname-scope>element</qname-scope>
</java-xml-type-mapping>
</java-wsdl-mapping>
-----------------------------------------------------------------------------------
webservices.xml
-----------------------------------------------------------------------------------
<?xml version='1.0' encoding='UTF-8' ?>
<webservices
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:impl="http://com.myapp/simple-ws4ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
version="1.1">
<webservice-description>
<webservice-description-name>HelloWorldService</webservice-description-name>
<wsdl-file>WEB-INF/wsdl/hello.wsdl</wsdl-file>
<jaxrpc-mapping-file>WEB-INF/jaxrpc-mapping.xml</jaxrpc-mapping-file>
<port-component>
<port-component-name>HelloWorld</port-component-name>
<wsdl-port>HelloWorld</wsdl-port>
<service-endpoint-interface>com.myapp.HelloWorld</service-endpoint-interface>
<service-impl-bean>
<servlet-link>HelloWorld</servlet-link>
</service-impl-bean>
</port-component>
</webservice-description>
-----------------------------------------------------------------------------------
web.xml
-----------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.myapp.HelloWorld_Impl</servlet-class>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/services/HelloWorld</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
STEP 3 :- after running java2wsdl tool hello.wsdl file is created.
=======
-----------------------------------------------------------------------------------
hello.wsdl
-----------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://ekta.com" xmlns:impl="http://ekta.com" xmlns:intf="http://ekta.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
</wsdl:types>
<wsdl:message name="printMessageRequest">
<wsdl:part name="in0" element="impl:in0"/>
</wsdl:message>
<wsdl:message name="printMessageResponse">
<wsdl:part name="printMessageReturn" element="impl:printMessageReturn"/>
</wsdl:message>
<wsdl:portType name="HelloWorld">
<wsdl:operation name="printMessage" parameterOrder="in0">
<wsdl:input name="printMessageRequest" message="impl:printMessageRequest"/>
<wsdl:output name="printMessageResponse" message="impl:printMessageResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="HelloWorldSoapBinding" type="impl:HelloWorld">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="printMessage">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="printMessageRequest">
<wsdlsoap:body use="literal" namespace="http://ekta.com"/>
</wsdl:input>
<wsdl:output name="printMessageResponse">
<wsdlsoap:body use="literal" namespace="http://ekta.com"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorld" binding="impl:HelloWorldSoapBinding">
<wsdlsoap:address location="http://localhost:8080/simple-ws4ee/services/HelloWorld"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
-----------------------------------------------------------------------------------
Problems
========
1) after deployment when i run HelloWorldClient.class i get the following error.
[java] javax.xml.rpc.JAXRPCException: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is
NOT expected, in something it was trying to deserialize.
[java] at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:304)
[java] at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:143)
[java] at org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:1250)
[java] at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1712)
[java] at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
[java] at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
[java] at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
[java] at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
[java] at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
[java] at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
[java] at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
[java] at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
[java] at org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:257)
[java] at org.apache.axis.MessagePart.getAsSOAPEnvelope(MessagePart.java:655)
[java] at org.apache.axis.Message.getSOAPEnvelope(Message.java:432)
[java] at org.apache.axis.client.Call.invokeEngine(Call.java:3062)
[java] at org.apache.axis.client.Call.invoke(Call.java:3024)
[java] at org.apache.axis.client.Call.invoke(Call.java:2619)
[java] at org.apache.axis.client.Call.invoke(Call.java:2524)
[java] at org.apache.axis.client.Call.invokeInternal(Call.java:1976)
[java] at org.apache.axis.client.Call.invoke(Call.java:1917)
[java] at com.myapp.HelloWorldSoapBindingStub.printMessage(Unknown Source)
[java] at com.myapp.HelloWorldClient.main(HelloWorldClient.java:17)
[java] Exception in thread "main"
[java] Java Result: 1