DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8680>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8680

echoHexBinary returns base64Binary...affects OperationDesc design

           Summary: echoHexBinary returns base64Binary...affects
                    OperationDesc design
           Product: Axis
           Version: nightly
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Major
          Priority: Other
         Component: Serialization/Deserialization
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


The echoHexBinary is returning a xsd:base64Binary type instead of xsd:hex.
This bug was discovered by Sam Ruby.
(I set the severity to Major because it breaks the Round2 interop contract...)

The root of the problem is that xsd:base64Binary and xsd:hexBinary both map to 
byte[].

Question: So how does the input to echoHexBinary get sent over correctly as a 
xsd:HexBinary?

Answer:  The stub code generates an addParameter call that 
indicates the type QName as xsd:hexBinary.  
This results in a ParameterDesc being built and ultimately a RPCParam being
built which is tied to the ParameterDesc.  
Thus when the byte[] is serialized, the proper typeQName is known.

Question: So why doesn't this happen on the server side for the return ?

Answer: A number of reasons.  
There is no such thing as a ParameterDesc for a Return. 
If there was, the ParameterDesc could be attached to the 
return RPCParam and the serialization
would work the same way as the serialization on the client side.  
In addition, the Return QName type needs to be communicated to the deployed 
service, so there needs to be a WSDDParameterDesc
for the return in the wsdd file.

So the proper way to fix this bug is to.
1) Create a ReturnDesc which inherits from ParameterDesc.
2) Change the OperationDesc object to locate the ReturnDesc.
3) Change the WSDD syntax to have a <return...> element similar to the 
<parameter...> element, implement
a WSDDReturn similar to WSDDParameter.  And make changes to WSDDOperation.
4) Change the WSDL2Java emitter to emit the return elements.
5) Change the RPCProvider (and possibly others to attach the ReturnDesc
to the RPCParam element).

Alternatively I could change xsd:HexBinary to map to our exclusive Hex 
class...but this is not exactly RPC compliant.

Reply via email to