Hi,
I have a service that returns a wsdl:message with multiple parts:

+++++++++++++++++++++++++
  <wsdl:message name="getPortfolioNameRequest">
    <wsdl:part name="clientInfo"    type="skream:WSClientInfo"/>
    <wsdl:part name="positionDate"  type="xsd:date"/>
    <wsdl:part name="portfolio"     type="skream:WSPortfolio"/>
  </wsdl:message>

   <wsdl:message name="getPortfolioNameResponse">
    <wsdl:part name="serverInfo"    type="skream:WSServerInfo"/> 
    <wsdl:part name="description"   type="xsd:string"/>
  </wsdl:message>
+++++++++++++++++++++++++

The wsdl2Java generates the following interface:

+++++++++++++++++++++++++
    public void getPortfolioName(WSClientInfo clientInfo, Date positionDate,
WSPortfolio portfolio, WSServerInfoHolder serverInfo, StringHolder description)
throws java.rmi.RemoteException;
+++++++++++++++++++++++++

The return type of the function is void.  When axis client receives the 
"getPortfolioNameResponse" message it fails to find a correct de-serializer for

type void.  Here is the exception stack:

+++++++++++++++++++++++++
org.xml.sax.SAXException: Deserializing parameter 'serverInfo':  could not find
deserializer for type {http://xml.apache.org/axis/}Void
        at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:302)
        at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:949)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:718)
        at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:232)
        at org.apache.axis.message.RPCElement.getParams(RPCElement.java:346)
        at org.apache.axis.client.Call.invoke(Call.java:2234)
        at org.apache.axis.client.Call.invoke(Call.java:2133)
        at org.apache.axis.client.Call.invoke(Call.java:1656)
        at
com.putnaminv.skream.ws.WSCalcEngineServiceSoapBindingStub.getPortfolioName(WSCalcEngineServiceSoapBindingStub.java:425)
        at
com.putnaminv.skream.ws.WSCalcEngineServiceTestCase.test4WSCalcEngineServiceGetPortfolioName(WSCalcEngineServiceTestCase.java:140)
        at java.lang.reflect.Method.invoke(Native Method)
        at junit.framework.TestCase.runTest(TestCase.java:154)
        at junit.framework.TestCase.runBare(TestCase.java:127)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at junit.textui.TestRunner.doRun(TestRunner.java:116)
        at junit.textui.TestRunner.doRun(TestRunner.java:109)
        at junit.textui.TestRunner.run(TestRunner.java:72)
        at
com.putnaminv.skream.ws.WSCalcEngineServiceTestCase.main(WSCalcEngineServiceTestCase.java:26)
+++++++++++++++++++++++++

However, declaring the return message to be empty ...

+++++++++++++++++++++++++
   <wsdl:message name="getPortfolioNameResponse"/>
+++++++++++++++++++++++++

... generates a function without OUT parameters

+++++++++++++++++++++++++
    public void getPortfolioName(WSClientInfo clientInfo, Date positionDate,
WSPortfolio portfolio) throws java.rmi.RemoteException;
+++++++++++++++++++++++++
... which the client uses without any serialization problems.

I should mention that the server is a C++ implementation generated with
the RogueWave SoapWorx engine, and the C++ client it generates does 
not have any problems digesting multiple OUT params.

Has anyone tried to implement a service with multiple INOUT/OUT parameters?
What are the possible workarounds here?

Thank,
--dmitry

=====
"Smith-n-Wesson--the original point-and-click interface"

Reply via email to