I am using Axis with SOAP to expose a method which has a parameter that is an array of objects. The server-config.wsdd looks as follows:
1<?xml version="1.0" encoding="UTF-8"?>
2
3<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
4 <globalConfiguration>
5 <parameter name="adminPassword" value="admin" />
6 <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
7 <parameter name="sendXsiTypes" value="false" />
8 <parameter name="sendMultiRefs" value="false" />
9 <parameter name="sendXMLDeclaration" value="true" />
10 <parameter name="axis.sendMinimizedElements" value="true" />
11 <requestFlow>
12 <handler type="java:org.apache.axis.handlers.JWSHandler">
13 <parameter name="scope" value="session" />
14 </handler>
15 <handler type="java:org.apache.axis.handlers.JWSHandler">
16 <parameter name="scope" value="request" />
17 <parameter name="extension" value=".jwr" />
18 </handler>
19 </requestFlow>
20 </globalConfiguration>
21
22 <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
23 <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
24 <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
25
26 <transport name="http">
27 <requestFlow>
28 <handler type="URLMapper" />
29 <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
30 </requestFlow>
31 </transport>
32
33 <transport name="local">
34 <responseFlow>
35 <handler type="LocalResponder" />
36 </responseFlow>
37 </transport>
38
39 <service name="wine" provider="java:RPC" style="rpc" use="encoded">
40 <parameter name="wsdlTargetNamespace" value="urn:http.elisosat.com" />
41 <parameter name="wsdlServiceElement" value="WineWebServiceSoapService" />
42 <parameter name="wsdlServicePort" value="wine" />
43 <parameter name="className" value="com.elisosat.service.http.WineWebServiceSoap"/>
44 <parameter name="wsdlPortType" value="WineWebServiceSoap" />
45 <parameter name="typeMappingVersion" value="1.2" />
46 <parameter name="sendMultiRefs" value="false" />
47 <parameter name="sendXsiTypes" value="false" />
48 <parameter name="allowedMethods" value="createBasket" />
49
50 <operation xmlns:operNS="urn:http.service.elisosat.com" xmlns:rtns="http://model.elisosat.com" name="createBasket" qname="operNS:createBasket" returnQName="testReturn" returnType="java:CreateBasketResult" soapAction="">
51 <parameter xmlns:tns="http://www.w3.org/2001/XMLSchema" qname="id" type="tns:long" />
52 <parameter xmlns:tns="http://model.elisosat.com" qname="basketItems" type="tns:ArrayOf_tns2_BasketItem" />
53 </operation>
54
55 <beanMapping xmlns:ns="http://model.elisosat.com" qname="ns:CreateBasketResult" type="java:com.elisosat.model.CreateBasketResultSoap" />
56 <beanMapping xmlns:ns="http://model.elisosat.com" qname="ns:BasketItem" type="java:com.elisosat.model.BasketItemSoap" />
57 <typeMapping xmlns:ns="http://model.elisosat.com" qname="ns:Result" type="java:com.elisosat.model.Result" serializer="org.apache.axis.encoding.ser.EnumSerializerFactory" deserializer="org.apache.axis.encoding.ser.EnumDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
58 <typeMapping xmlns:ns="http://www.w3.org/2001/XMLSchema" qname="ns:string" type="java:java.lang.String" serializer="org.apache.axis.encoding.ser.SimpleSerializerFactory" deserializer="org.apache.axis.encoding.ser.SimpleDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
59 <typeMapping xmlns:ns="http://www.w3.org/2001/XMLSchema" qname="ns:date" type="java:java.util.Date" serializer="org.apache.axis.encoding.ser.DateSerializerFactory" deserializer="org.apache.axis.encoding.ser.DateDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
60 <arrayMapping xmlns:ns="urn:http.service.elisosat.com" xmlns:cmp-ns="http://model.elisosat.com" qname="ns:ArrayOf_tns2_BasketItem" type="java:com.elisosat.model.BasketItemSoap[]" innerType="cmp-ns:BasketItem" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
61 </service>
62
63</deployment>
BasketItemSoap looks as follows:
1package com.elisosat.model;
2
3public class BasketItemSoap {
4 long basketItemId;
5 long productId;
6 long quantity;
7
8 public BasketItemSoap(long basketItemId, long productId, long quantity) {
9 super();
10 this.basketItemId = basketItemId;
11 this.productId = productId;
12 this.quantity = quantity;
13 }
14
15 public long getBasketItemId() {
16 return basketItemId;
17 }
18 public long getProductId() {
19 return productId;
20 }
21 public long getQuantity() {
22 return quantity;
23 }
24
25 public String toString() {
26 return "(" + basketItemId + " " + productId + " " + quantity + ")";
27 }
28}
When I call CreateBasket with a list containing the following data [ (1,2,3), (5,6,7)] then what is received by the server is [(1,1,1), 5,5,5)] where the first field is repeated in each object.
I am, however, able to return an array of objects successfully (fields are not repeated). I suspect the problem lies with the wsdd code.
Can anyone help, please?
Please sign in to flag this as inappropriate.