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