Hi All,

Firstly, i'm quite new to SOAP and webservices :-)
Here's my problem: I am trying to use a webservice (not mine) and having trouble getting an array of objects. I think my problem lies in defining the type mapping and serializers/deserializers for it.

I have been struggling with this for a while, any help is greatly appreciated!

Thanks,
Christian


Heres part of the wsdl:

<!-- interface IHardDiskAttachment as struct: -->
    <xsd:complexType name="IHardDiskAttachment">
      <xsd:sequence>
        <xsd:element name="hardDisk" type="xsd:string"/>
        <xsd:element name="controller" type="vbox:DiskControllerType"/>
        <xsd:element name="deviceNumber" type="xsd:int"/>
      </xsd:sequence>
    </xsd:complexType>
##### cut #####
<!-- collection IHardDiskAttachmentCollection as array (wsmap: struct): -->
    <xsd:complexType name="ArrayOfIHardDiskAttachment">
      <xsd:sequence>
<xsd:element name="array" minOccurs="0" maxOccurs="unbounded" type="vbox:IHardDiskAttachment"/>
      </xsd:sequence>
    </xsd:complexType>
##### cut #####

Here's my java client code:

  public IHardDisk getHardDisk(){
      IHardDisk retCode = null;
            try {
          Call call = getCall();
          call.setReturnClass(Vector.class);
TypeMappingRegistry registry = call.getService().getTypeMappingRegistry();
          TypeMapping mapping = registry.createTypeMapping();
QName IHardDiskAttachmentArrayTypeQname = new QName(mor.getNameSpace(), "ArrayOfIHardDiskAttachment"); QName IHardDiskAttachmentArrayElementName = new QName("", "array"); mapping.register(IHardDiskAttachment[].class, IHardDiskAttachmentArrayTypeQname, new ArraySerializerFactory(IHardDiskAttachmentArrayTypeQname), new ArrayDeserializerFactory(IHardDiskAttachmentArrayTypeQname));
          registry.register("ArrayOfIHardDiskAttachment", mapping);
                    IHardDiskAttachment[] disks =
                  (IHardDiskAttachment[])call.invoke(mor.getNameSpace(),
                  "IMachine_getHardDiskAttachments",
                  new Object[] { mor.getMOR() });
      } catch (Exception e) {
          e.printStackTrace();
      }
            return retCode;
  }

I assume there are many places it is going wrong, lots of trial and error :-/

Here's the SOAP response sent form the server:

HTTP/1.1 200 OK
Server: gSOAP/2.7
Content-Type: text/xml; charset=utf-8
Content-Length: 562
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:vbox="http://www.virtualbox.org/";>
<SOAP-ENV:Body>
  <vbox:IVirtualBox_getMachinesResponse>
      <returnval>
          <array>8bf184786b97a493-0000000000000012</array>
          <array>8bf184786b97a493-0000000000000013</array>
      </returnval>
  </vbox:IVirtualBox_getMachinesResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Exception:

05-Mar-2008 11:39:31 org.apache.axis.client.Call invoke
SEVERE: Exception:
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize. at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:145) at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
      at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
      at org.apache.axis.client.Call.invoke(Call.java:2467)
      at org.apache.axis.client.Call.invoke(Call.java:2366)
      at com.sun.vda.agent.vb.IMachine.getHardDisk(IMachine.java:111)
      at com.sun.vda.agent.vb.VirtualBox.<init>(VirtualBox.java:47)
      at com.sun.vda.agent.vb.VirtualBox.main(VirtualBox.java:136)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize. at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:145) at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
      at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
      at org.apache.axis.client.Call.invoke(Call.java:2467)
      at org.apache.axis.client.Call.invoke(Call.java:2366)
      at com.sun.vda.agent.vb.IMachine.getHardDisk(IMachine.java:111)
      at com.sun.vda.agent.vb.VirtualBox.&lt;init&gt;(VirtualBox.java:47)
      at com.sun.vda.agent.vb.VirtualBox.main(VirtualBox.java:136)

      {http://xml.apache.org/axis/}hostname:127.0.0.1

org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
      at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
      at org.apache.axis.client.Call.invoke(Call.java:2470)
      at org.apache.axis.client.Call.invoke(Call.java:2366)
      at com.sun.vda.agent.vb.IMachine.getHardDisk(IMachine.java:111)
      at com.sun.vda.agent.vb.VirtualBox.<init>(VirtualBox.java:47)
      at com.sun.vda.agent.vb.VirtualBox.main(VirtualBox.java:136)
Caused by: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize. at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:145) at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
      at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
      at org.apache.axis.client.Call.invoke(Call.java:2467)
      ... 4 more

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to