You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsif-user@ws.apache.org by Suresh <su...@vergiltech.com> on 2002/03/02 19:14:37 UTC
Re: Complex Types Confusion
Thanks a million for replying.That really helped a lot.i am using
ctx.setObjectPart(
WSIFConstants.CONTEXT_OPERATION_STYLE,
WSIFConstants.CONTEXT_OPERATION_STYLE_WRAPPED);
and its working fine.
suresh.
----- Original Message -----
From: "Anthony Elder" <an...@uk.ibm.com>
To: <ws...@ws.apache.org>
Sent: Friday, February 28, 2003 2:49 AM
Subject: Re: Complex Types Confusion
>
> Hi Suresh,
>
> This service is a wrapped document literal style service. There's two ways
> of calling this type of service - using wrapped parts, or using unwrapped
> parts. What's going wrong here is that WSIF is deciding to use wrapped
> parts, where as your WSIF client program is trying to use unwrapped parts.
>
> Looking at the WSDL message and schema there is a part called "parameters"
> which is an element called "ReturnCodesResponse":
>
> <message name="ReturnCodesSoapOut">
> <part name="parameters" element="s0:ReturnCodesResponse" />
> </message>
>
> <s:element name="ReturnCodesResponse">
> <s:complexType>
> <s:sequence>
> <s:element minOccurs="0" maxOccurs="1"
name="ReturnCodesResult"
> type="s0:ArrayOfAnyType" />
> </s:sequence>
> </s:complexType>
> </s:element>
>
> So using wrapped style WSIF would use a WSIFMessage part called
> "parameters" which would have a value class called "ReturnCodesResponse"
> which has getter and setter for a field called "ReturnCodesResult". Using
> unwrapped style WSIF would use a WSIFMessage part called
> "returnCodesResult" with a value class called "ArrayOfAnyType".
>
> When deciding on what style to use WSIF looks at the parts in the input
> WSIFMessage comparing them to the WSDL to see if you are using wrapped or
> unwrapped parts.
>
> In this case the operation has *no* input parts, so WSIF doesn't know what
> you want and defaults to wrapped.
>
> There's two ways to fix this - use WSDL2Java with the -W switch to
generate
> wrapped classes and then in your WSIF client code set up type mappings
> like:
>
> service.mapType(
> new javax.xml.namespace.QName(
> "http://ws.cdyne.com/",
> "ReturnCodesResponse"),
> ReturnCodesResponse.class);
> service.mapType(
> new javax.xml.namespace.QName(
> "http://ws.cdyne.com/",
> "ArrayOfAnyType"),
> ArrayOfAnyType.class);
>
> Alternatively you can force WSIF to use a particular style by setting a
> part in the context message, for example:
>
>
> WSIFOperation op = wsifPort.createOperation("ReturnCodes");
>
> WSIFMessage ctx = op.getContext();
> ctx.setObjectPart(
> WSIFConstants.CONTEXT_OPERATION_STYLE,
> WSIFConstants.CONTEXT_OPERATION_STYLE_WRAPPED);
> op.setContext(ctx);
>
> You will still need a mapType call for the ArrayOfAnyType class:
>
> service.mapType(
> new javax.xml.namespace.QName(
> "http://ws.cdyne.com/",
> "ArrayOfAnyType"),
> ArrayOfAnyType.class);
>
> Hope this helps.
>
> One thing I guess worth thinking about is that perhaps in this case it
> would be better for WSIF to default to using unwrapped parts, what do
> others think?
>
> ...ant
>
> Anthony Elder
> ant.elder@uk.ibm.com
> Web Services Development
> IBM UK Laboratories, Hursley Park
> (+44) 01962 818320, x248320, MP208.
>
>
> "Suresh" <su...@vergiltech.com> on 27/02/2002 23:01:01
>
> Please respond to wsif-user@ws.apache.org
>
> To: <ws...@ws.apache.org>
> cc:
> Subject: Complex Types Confusion
>
>
>
> Multibinding QuestionHi all,
> I am trying to invoke a webservice hosted at
> http://ws.cdyne.com/emailverify/ev.asmx?wsdl . I tried calling the
> ReturnCodes operation
> in it. The operation does not take any input params. I tried
> calling the service without doing Service.mapType(..) when i did this i
got
> back the following error.
>
> org.xml.sax.SAXException: Deserializing parameter 'ReturnCodesResponse':
> could not find deserializer for type
> {http://ws.cdyne.com/}ReturnCodesResponse
> at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:297)
> at
>
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
>
> tionContextImpl.java:921)
> at
>
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
>
> at
>
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
>
> 699)
> at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:224)
> at org.apache.axis.message.RPCElement.getParams(RPCElement.java:331)
> at org.apache.axis.client.Call.invoke(Call.java:2200)
> at org.apache.axis.client.Call.invoke(Call.java:2099)
> at org.apache.axis.client.Call.invoke(Call.java:1622)
> at
>
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.invokeAXI
>
> SDocStyle(Unknown Source)
> at
>
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.invokeReq
>
> uestResponseOperation(Unknown Source)
> at
>
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.executeRe
>
> questResponseOperation(Unknown Source)
> at com.vergil.wsif.WSIFDynClient.executeWebService(WSIFDynClient.java:95)
> at com.vergil.wsif.WSIFDynClient.invokeWebService(WSIFDynClient.java:218)
> at com.vergil.wsif.WSIFDynClient.main(WSIFDynClient.java:35)
>
> So i created client stubs using wsdl2java util of axis and registered
> the "ReturnCodesResponse" Qname with the ArrayOfAnyType Class that
> wsdl2java
> generated.
>
> When i tried invoking the service now i got back the following error
>
> org.xml.sax.SAXException: Invalid element in
> com.wsif.evSoap.ReturnCodes.ArrayOfAnyType - ReturnCodesResult
> at
>
org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.
>
> java:260)
> at
>
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
>
> tionContextImpl.java:921)
> at
>
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
> at
>
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
>
> 699)
> at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:224)
> at org.apache.axis.message.RPCElement.getParams(RPCElement.java:331)
> at org.apache.axis.client.Call.invoke(Call.java:2200)
> at org.apache.axis.client.Call.invoke(Call.java:2099)
> at org.apache.axis.client.Call.invoke(Call.java:1622)
> at
>
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.invokeAXI
>
> SDocStyle(Unknown Source)
> at
>
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.invokeReq
>
> uestResponseOperation(Unknown Source)
> at
>
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.executeRe
>
> questResponseOperation(Unknown Source)
> at com.vergil.wsif.WSIFDynClient.executeWebService(WSIFDynClient.java:95)
> at com.vergil.wsif.WSIFDynClient.invokeWebService(WSIFDynClient.java:219)
> at com.vergil.wsif.WSIFDynClient.main(WSIFDynClient.java:352)
>
> I am not sure if its a bug or if there is something wrong with my code.
>
> suresh
>
>
>
>
>
>
>
>