I tried your suggestion and it does in fact work.  However, if we have to
modify generated code then there is a bug.  

In my case, I prefer to automatically generate the java interfaces from the
wsdl and then compile my implementations against that.  The solution I
finally came up with was to give any void methods a dummy string return
type.  Then everything works.  Hopefully this can be fixed before Axis 1.2
is released.

Aaron.



 -----Original Message-----
From:   Cunningham David [mailto:[EMAIL PROTECTED] 
Sent:   Thursday, March 25, 2004 6:36 PM
To:     [EMAIL PROTECTED]
Subject:        RE: client fails to deserialize type Void in document /
literal

In your stub code you should see a line like this:
oper.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID); 

Comment that line out and everything should work fine.

-----Original Message-----
From: Bajek, Aaron [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 25, 2004 4:31 PM
To: '[EMAIL PROTECTED]'
Subject: client fails to deserialize type Void in document / literal

I have  a document / literal service with a single method, which has a void
return type.  The call executes correctly however the server returns a
non-empty soap body.  The element it creates is no where in the wsdl.  The
client then throws this exception.

        {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: 
        Deserializing parameter 'messageResponse':  could not find
deserializer for type {http://xml.apache.org/axis/}Void
        at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:269)
        at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deserializa
tionContextImpl.java:1001)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:159)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:
1050)
        at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:196)
        at org.apache.axis.message.RPCElement.getParams(RPCElement.java:310)
        at org.apache.axis.client.Call.invoke(Call.java:2381)
        at org.apache.axis.client.Call.invoke(Call.java:2280)
        at org.apache.axis.client.Call.invoke(Call.java:1741)
        at
test.clients.axis.messaging.MessengerBindingStub.send(MessengerBindingStub.j
ava:142)
        at test.clients.axis.messaging.MessageEx.send(MessageEx.java:44)
        at
test.clients.axis.messaging.MessageProducer.main(MessageProducer.java:51)

I am using the latest Axis source as of this morning.  There is a check in
Call.java around line 2422 which ignores the return type if the operation is
supposed to have a void return type.  However, the client fails before it
gets that far.

Is this a bug or am I missing some configuration setting?  Is there supposed
to be a deserializer for Void?

Aaron Bajek

Reply via email to