Thanks much for your response. Will Axis be JAXRPC 1.1 compliant with
version 1.2?

Cheers,

-michael 

-----Original Message-----
From: Choi Jongjin [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, December 15, 2004 9:31 AM
To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: RE: Question on user exception handling on autogenerated
clients

Hi, Michael.

Handling service-specific exception is implemented in Axis. 

In the generated code, 

>         java.lang.Object _resp = _call.invoke(new java.lang.Object[] 
>{new java.lang.Integer(in0)});
>
>         if (_resp instanceof java.rmi.RemoteException) {
>             throw (java.rmi.RemoteException)_resp;
>         }
>         else {

AFAIK, _call.invoke() returns RemoteException (AxisFault) for propagated
soap fault (server-side exception).

But Axis's implementation lacks of JAX-RPC 1.1 compatibility.
The generated exception classes are derived classes of AxisFault and
require default constructor and setters which are not required in
JAX-RPC 1.1.

I guess this causes some problem.
If you use JAX-RPC 1.1 compliant exception classes (which have not
default constructor and setter methods) in the client side, the
deserialization of SOAP Fault message would fail.

I will add other comments in JIRA BEEHIVE-133.

/Jongjin
 

>From: "Michael Merz" <[EMAIL PROTECTED]>
>Reply-To: "Beehive Developers" <[EMAIL PROTECTED]>
>To: <[EMAIL PROTECTED]>
>CC: <[EMAIL PROTECTED]>
>Subject: Question on user exception handling on autogenerated clients
>Date: Tue, 14 Dec 2004 10:12:20 -0800
>
>Bcc: [EMAIL PROTECTED]
>
>I'm autogenerating my clients using the wsdl2java ant task. It's 
>working really well.
>
>One question regarding exception handling, though: When the server 
>throws a custom exception (subclass of java.lang.Exception), how does 
>the autogenerated client propagate the results in the response to the 
>caller? I had a look at the generated code and couldn't find any hooks 
>(see below). Is this not yet implemented? Thanks much.
>
>Cheers,
>
>-michael
>
>     public int throwFooException(int in0) throws 
>java.rmi.RemoteException, 
>org.apache.beehive.wsm.test.rpclit.FooException {
>         if (super.cachedEndpoint == null) {
>             throw new org.apache.axis.NoEndPointException();
>         }
>         org.apache.axis.client.Call _call = createCall();
>         _call.setOperation(_operations[0]);
>         _call.setUseSOAPAction(true);
>         _call.setSOAPActionURI("");
>         _call.setEncodingStyle(null);
>         _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR,
>Boolean.FALSE);
>         _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS,
>Boolean.FALSE);
>
>_call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANT
>S
>);
>         _call.setOperationName(new
>javax.xml.namespace.QName("http://rpclit.test.wsm.beehive.apache.org";,
>"throwFooException"));
>
>         setRequestHeaders(_call);
>         setAttachments(_call);
>         java.lang.Object _resp = _call.invoke(new java.lang.Object[] 
>{new java.lang.Integer(in0)});
>
>         if (_resp instanceof java.rmi.RemoteException) {
>             throw (java.rmi.RemoteException)_resp;
>         }
>         else {
>             extractAttachments(_call);
>             try {
>                 return ((java.lang.Integer) _resp).intValue();
>             } catch (java.lang.Exception _exception) {
>                 return ((java.lang.Integer) 
>org.apache.axis.utils.JavaUtils.convert(_resp, int.class)).intValue();
>             }
>         }
>     }
>



Reply via email to