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 rajaguru ganesan <ra...@gmail.com> on 2005/07/08 08:43:33 UTC
Deserialization Problem
Hi,
I am facing problem while deserializing SOAP responses containing an
Object encapsulating an Array of Objects(Please see the Examples
below). I am using AXIS 1.2.1. I have used WSDL2JAVA to generate
client stubs.
The Error Message is below:
Caught Exception from Example:org.xml.sax.SAXException: No
deserializer defined for array type {Exam
pleService}MyClass
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: No deserializer defined for
array type {ExampleService}MyCla
ss
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}
org.xml.sax.SAXException: No deserializer defined for array type
{ExampleService}MyClass
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:221)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:128)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:10
87)
at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1403)
at org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLValidator.java:1550)
at org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScan
ner.java:1149)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:393)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:424)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2765)
at org.apache.axis.client.Call.invoke(Call.java:2748)
at org.apache.axis.client.Call.invoke(Call.java:2424)
at org.apache.axis.client.Call.invoke(Call.java:2347)
at org.apache.axis.client.Call.invoke(Call.java:1804)
at ExampleService_pkg.AxisServletSoapBindingStub.testExampleCollection(AxisServletSoapBindin
gStub.java:222)
at TestExam.main(TestExam.java:27)
Following are the classes:
Original java Classes:
================
package package1;
public class MyClass
{
public String string;
}
package package1;
public class ExampleCollection
{
public MyClass[] myClass;
}
Service Class:
==========
package package1;
public class ExampleService
{
public ExampleCollection returnExampleCollection()
{
ExampleCollection exampleCollection=new ExampleCollection();
MyClass myClassObject[]=new MyClass[2];
myClassObject[0]=new MyClass();
myClassObject[1]=new MyClass();
myClassObject[0].string=new String("Test1");
myClassObject[1].string=new String("Test2");
exampleCollection.myClass=myClassObject;
return exampleCollection;
}
public ExampleCollection testExampleCollection(ExampleCollection e)
{
return e;
}
public MyClass[] testArray(MyClass[] m)
{
return m;
}
}
server-config.wsdd file:
=================
<service name="ExampleService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="package1.ExampleService"/>
<beanMapping qname="myNS:ExampleCollection"
xmlns:myNS="urn:ExampleService"
languageSpecificType="java:package1.ExampleCollection"/>
<beanMapping qname="myNS:MyClass" xmlns:myNS="urn:ExampleService"
languageSpecificType="java:package1.MyClass"/>
</service>
client code:
========
import ExampleService_pkg.*;
class TestExam{
public static void main(String args[]){
try {
ExampleCollection exampleCollection=new ExampleCollection();
MyClass myClassObject[]=new MyClass[2];
myClassObject[0]=new MyClass();
myClassObject[1]=new MyClass();
myClassObject[0].setString("Test1");
myClassObject[1].setString("Test2");
exampleCollection.setMyClass(myClassObject);
ExampleServiceServiceLocator exLocator=new
ExampleServiceServiceLocator();
AxisServletSoapBindingStub
exService=(AxisServletSoapBindingStub)exLocator.getAxisServlet();
if(exService!=null) {
System.out.println("Inside If Part ");
ExampleCollection
exampleCol=exService.returnExampleCollection();
ExampleCollection
examCol=exService.testExampleCollection(exampleCollection);
MyClass[] myCl=exService.testArray(myClassObject);
System.out.println("after calling ");
} else {
System.out.println("Error");
}
} catch (Exception e) {
System.out.println("Caught Exception from
Example:"+e.getMessage());
e.printStackTrace();
}
}
}
testArray() method invocation completed succesfully without anyproblem.
But testExampleCollection() and returnExampleCollection() methods are failing!.
That's I am unable to send or receive ExampleCollection.
Even I have tried adding the following entries in
server-config.wsdd(both not at a time, one by one): but these changes
also don't improve anything.
<arrayMapping qname="myNS:ArrayOfMyClass"
languageSpecificType="java:package1.MyClass[]"
innerType="myNS:MyClass" xmlns:myNS="urn:ExampleService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<typeMapping qname="myNS:ArrayOfMyClass" xmlns:myNS="urn:ExampleService"
languageSpecificType="java:package1.MyClass[]"
serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
Regards,
Rajaguru