Hello Friends,

Hello Friends,


While Accessing a webservice using axis 1.2, we are sending the input as
arrayofComplex Data Type.

ComplexData Type - a Class KeyValuePair.
public class KeyValuePair  implements java.io.Serializable {
    private java.lang.String key;
    private java.lang.String value;
    public KeyValuePair() {    }

    public KeyValuePair(java.lang.String key, java.lang.String value) {
           this.key = key;
           this.value = value;
    }
 }

Input to the webservice is array of the above mentioned data Type.

We are expecting the following request.

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsd="
http://www.w3.org/2001/XMLSchema"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";><soapenv:Body><ns1:ProcessEventsoapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns1="
http://www.epiphany.com/RP";>
<package xsi:type="xsd:string">THREE</package>
<event xsi:type="xsd:string">OfferRequest</event>
<fields soapenc:arrayType="ns1:ArrayOfKeyValuePair[10]"
xsi:type="soapenc:Array" xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/";>
  <item href="#id0"/>
  <item href="#id1"/>
 </fields>
</ns1:ProcessEvent>

 <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/";  xsi:type="ns7:KeyValuePair"
xmlns:ns7="http://www.epiphany.com/RP"; xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/";>
  <key xsi:type="xsd:string">
   SessionId
  </key>
  <value xsi:type="xsd:string">
   1234567890
  </value>
 </multiRef>

 <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="ns2:KeyValuePair"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns2="
http://www.epiphany.com/RP";>
  <key xsi:type="xsd:string">
   Customer_ID
  </key>
  <value xsi:type="xsd:string">
  </value>
 </multiRef>
  </soapenv:Body>
 </soapenv:Envelope>

Instead we are getting the following

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsd="
http://www.w3.org/2001/XMLSchema"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";><soapenv:Body><ns1:ProcessEventsoapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns1="
http://www.epiphany.com/RP";>
<package xsi:type="xsd:string">THREE</package>
<event xsi:type="xsd:string">OfferRequest</event>
<fields soapenc:arrayType="ns1:ArrayOfKeyValuePair[10]"
xsi:type="soapenc:Array" xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/";>
  <fields href="#id0"/>
  <fields href="#id1"/>
 </fields>
</ns1:ProcessEvent>

 <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/";  xsi:type="ns7:KeyValuePair"
xmlns:ns7="http://www.epiphany.com/RP"; xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/";>
  <key xsi:type="xsd:string">
   SessionId
  </key>
  <value xsi:type="xsd:string">
   1234567890
  </value>
 </multiRef>

 <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="ns2:KeyValuePair"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns2="
http://www.epiphany.com/RP";>
  <key xsi:type="xsd:string">
   Customer_ID
  </key>
  <value xsi:type="xsd:string">
  </value>
 </multiRef>
  </soapenv:Body>
 </soapenv:Envelope>


Note the ArrayOfKeyValuePair should have tag named <item> as per soap
standards, but we get the parent array tag name in its
element name too. i.e fields tag is replaced for <item tag

HOw to solve this issue and get expected response.

Fyi
We have given the Serializer and Deserializer as below
QName arrayOfKeyValuePairQname = new javax.xml.namespace.QName("
http://www.epiphany.com/RP";, "ArrayOfKeyValuePair");
            QName arrayOfReturnedOffersQname = new
javax.xml.namespace.QName("http://www.epiphany.com/RP";,
"ArrayOfReturnedOffer");
            QName keyValuePairQName = new javax.xml.namespace.QName("
http://www.epiphany.com/RP";, "KeyValuePair");
            QName returnedOfferQName = new javax.xml.namespace.QName("
http://www.epiphany.com/RP";, "ReturnedOffer");


            TypeMappingRegistry typeMappingRegistry =
service.getTypeMappingRegistry();
            TypeMapping map = typeMappingRegistry.getDefaultTypeMapping();

            map.register(KeyValuePair[].class, arrayOfKeyValuePairQname,
                  new ArraySerializerFactory(KeyValuePair[].class,
arrayOfKeyValuePairQname),
                  new ArrayDeserializerFactory());

            map.register(KeyValuePair.class, keyValuePairQName,
                  new BeanSerializerFactory(KeyValuePair.class,
                        keyValuePairQName), new BeanDeserializerFactory(
                              KeyValuePair.class, keyValuePairQName));

            map.register(ReturnedOffer.class, returnedOfferQName,
                  new BeanSerializerFactory(ReturnedOffer.class,
                        returnedOfferQName), new BeanDeserializerFactory (
                              ReturnedOffer.class, returnedOfferQName));

Still we are not able to get the expected result. Kindly help us ASAP.


WSDL Entry is as follows.
  <xsd:complexType name="KeyValuePair">
        <xsd:sequence>
          <xsd:element name="key" type="xsd:string"/>
          <xsd:element name="value" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ArrayOfKeyValuePair">
        <xsd:complexContent>
          <xsd:restriction base="SOAP-ENC:Array">
             <xsd:sequence>
              <xsd:element name="item" type="rp:KeyValuePair"
maxOccurs="unbounded"/>
            </xsd:sequence>
            <xsd:attribute ref="SOAP-ENC:arrayType"
wsdl:arrayType="rp:KeyValuePair[]"/>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>

 <message name="ProcessEventRequest">
    <part name="package" type="xsd:string"/>
    <part name="event" type="xsd:string"/>
    <part name="fields" type="rp:ArrayOfKeyValuePair"/>
  </message>


Regards
Karthik R

Reply via email to