Fóruns

Início » Liferay Portal » English » 6. Portal Framework

Visualização combinada Visão plana Exibição em árvore
Tópicos [ Anterior | Próximo ]
PW Butler
soap method's array parameter not transmitted correctly
13 de Novembro de 2012 01:29
Resposta

PW Butler

Ranking: New Member

Mensagens: 1

Data de entrada: 11 de Agosto de 2011

Mensagens recentes

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?