In my service, I have a method that accepts a Map as a parameter:
public MyObject serviceMethod(Map values) {
// impl...
}
I used Axis to auto generate the WSDL for it and it did generate:
<s:schema targetNamespace="http://xml.apache.org/xml-soap">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="Map">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="item">
<s:complexType>
<s:all>
<s:element name="key" type="s:anyType" />
<s:element name="value" type="s:anyType" />
</s:all>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
<s:element name="Map" nillable="true" type="s1:Map" />
For it (namespaces for tags are a little different, but shouldn't be an
issue).
I'm getting the error:
Caused by: org.xml.sax.SAXException: Bad types (class [Ljava.lang.Object; ->
int
erface java.util.Map)
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:207)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese
rializationContextImpl.java:857)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.ja
va:199)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElemen
t.java:644)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:201)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:259)
at
org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider
.java:161)
at
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:
289)
When I try to run this. The client is sending (using tcpmon):
<?xml version='1.0' encoding='utf-8'?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns=""
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:s1="http://xml.apache.org/xml-soap"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="urn:mydomain"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://guispectrum.spectrum.summitsite.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<mswsb:enter xmlns:mswsb="http://mydomain" xmlns="">
<values xsi:type="soapenc:Array" soapenc:arrayType="s1:item[4]">
<item xsi:type="s1:item">
<key xsi:type="xsd:string">ID</key>
<value xsi:type="xsd:string">ZZ</value></item>
<item xsi:type="s1:item">
<key xsi:type="xsd:string">TRAN_CODE</key>
<value xsi:type="xsd:string">WHOO</value></item>
<item xsi:type="s1:item">
<key xsi:type="xsd:string">PARAMETERS_1</key>
<value xsi:type="xsd:string"></value></item>
<item xsi:type="s1:item">
<key xsi:type="xsd:string">PARAMETERS_2</key>
<value
xsi:type="xsd:string"></value></item></values></mswsb:enter></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Is what the client is sending wrong, and if so, what should it be sending?
I tried to add a typeMapping in server-config.wsdl:
<typeMapping
xmlns:ns="http://xml.apache.org/xml-soap"
qname="ns:Map"
type="java:java.util.Map"
serializer="org.apache.axis.encoding.ser.MapSerializerFactory"
deserializer="org.apache.axis.encoding.ser.MapDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
But that didn't help.
Thanks!
Joel Shellman