Fórum

soap method's array parameter not transmitted correctly

PW Butler, modificado 11 Anos atrás.

soap method's array parameter not transmitted correctly

New Member Mensagem: 1 Data de Entrada: 11/08/11 Postagens 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:
<!--?xml version="1.0" encoding="UTF-8"?-->

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
	<globalconfiguration>
		<parameter name="adminPassword" value="admin" />
		<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
		<parameter name="sendXsiTypes" value="false" />
		<parameter name="sendMultiRefs" value="false" />
		<parameter name="sendXMLDeclaration" value="true" />
		<parameter name="axis.sendMinimizedElements" value="true" />
		<requestflow>
			<handler type="java:org.apache.axis.handlers.JWSHandler">
				<parameter name="scope" value="session" />
			</handler>
			<handler type="java:org.apache.axis.handlers.JWSHandler">
				<parameter name="scope" value="request" />
				<parameter name="extension" value=".jwr" />
			</handler>
		</requestflow>
	</globalconfiguration>
	
	<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
	<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
	<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
	
	<transport name="http">
		<requestflow>
			<handler type="URLMapper" />
			<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
		</requestflow>
	</transport>
	
	<transport name="local">
		<responseflow>
			<handler type="LocalResponder" />
		</responseflow>
	</transport>
	
	<service name="wine" provider="java:RPC" style="rpc" use="encoded">
		<parameter name="wsdlTargetNamespace" value="urn:http.elisosat.com" />
		<parameter name="wsdlServiceElement" value="WineWebServiceSoapService" />
		<parameter name="wsdlServicePort" value="wine" />
		<parameter name="className" value="com.elisosat.service.http.WineWebServiceSoap" />
		<parameter name="wsdlPortType" value="WineWebServiceSoap" />
		<parameter name="typeMappingVersion" value="1.2" />
		<parameter name="sendMultiRefs" value="false" />
		<parameter name="sendXsiTypes" value="false" />
		<parameter name="allowedMethods" value="createBasket" />	
		
		<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="">
			<parameter xmlns:tns="http://www.w3.org/2001/XMLSchema" qname="id" type="tns:long" />
			<parameter xmlns:tns="http://model.elisosat.com" qname="basketItems" type="tns:ArrayOf_tns2_BasketItem" />
		</operation>
		
		<beanmapping xmlns:ns="http://model.elisosat.com" qname="ns:CreateBasketResult" type="java:com.elisosat.model.CreateBasketResultSoap" />
		<beanmapping xmlns:ns="http://model.elisosat.com" qname="ns:BasketItem" type="java:com.elisosat.model.BasketItemSoap" />
		<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/" />
		<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/" />
		<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/" />
		<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/" />	
	</service>
	
</deployment>


BasketItemSoap looks as follows:
package com.elisosat.model;

public class BasketItemSoap {
	long basketItemId;
	long productId;
	long quantity;

	public BasketItemSoap(long basketItemId, long productId, long quantity) {
		super();
		this.basketItemId = basketItemId;
		this.productId = productId;
		this.quantity = quantity;
	}

	public long getBasketItemId() {
		return basketItemId;
	}
	public long getProductId() {
		return productId;
	}
	public long getQuantity() {
		return quantity;
	}

	public String toString() {
		return "(" + basketItemId + " " + productId + " " + quantity + ")";
	}
}

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?