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.<init>(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]