[jbossws-users] custom fault mapping with jax-rpc

Billy Newman newmanw10 at hotmail.com
Thu Oct 29 21:46:45 EDT 2009


I am currently working on an old legacy system that is using jax-rpc.  I would like to add in some custom faults such that I can inform clients better.  I.E. I can throw custom exceptions/faults such that the user can catch them to determine the best course of action.  However using JBoss I have not been able to get this to work.  The main problem is that in the SOAP message that comes back there is no <detail> tag.  This tag is how the exception would get deserialized on the client, so without that tag the client will have no idea what exception/fault was thrown.

Has anyone every gotten a custom fault to work with JBoss?  My guess is no as I have not been able to find out anything on this problem.

I am running 4.2.3.GA and out of the box is has jbossws-native-3.0.1, I also installed jbossws-native-3.1.1.GA to see if it fixed the problem but I was still out of luck.  Please help I am all out of ideas!  Below are some code snippets to show what I am talking about.  If you need more please let me know.

I took a simple example jax-rpc HelloWord service from the java tutorial section and added a fault to the wsdl.

Here is a snippet:
  <portType name="HelloIF">
    <operation name="sayHello" parameterOrder="String_1">
      <input message="tns:HelloIF_sayHello"/>
      <output message="tns:HelloIF_sayHelloResponse"/>
            <fault name="fault" message="tns:sayHelloException"></fault>
        </operation>
  </portType> 

I generated the jax-rpc classes:
 
Here is the fault/exception generated:
public class SayHelloException extends java.lang.Exception {
    private java.lang.String message;
    
    
    public SayHelloException(java.lang.String message) {
        super(message);
        this.message = message;
    }
    
    public java.lang.String getMessage() {
        return message;
    }
}

Here is the endpoint interface:
public interface HelloIF extends java.rmi.Remote {
    public java.lang.String sayHello(boolean string_1) throws 
        samples.webservices.jaxrpc.simple.SayHelloException,  java.rmi.RemoteException;
}

I also creating the jax-rpc mapping file and deployed with the war in the web-inf directory as well as my webservices.xml and web.xml.

At this point I am not sure why jboss is not creating the <detail> tag in the SOAP message that gets sent back to the server.

Here is how I throw the custom exception on the server:
throw new SayHelloException("Throwing custom exception/fault from WS");

Here is my client:
      try {
          Stub stub = (Stub) port;
          stub._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8080/hello/simple"); 
          String result = port.sayHello(true);
          System.out.println(result);
      } catch (SayHelloException ex) {
          System.out.println("PASS! caught a custom exception");
      } catch (RemoteException ex) {
      } catch (Exception ex) {
          System.out.println("FAIL! caught a Exception");
      }
 		 	   		  
_________________________________________________________________
Windows 7: It works the way you want. Learn more.
http://www.microsoft.com/Windows/windows-7/default.aspx?ocid=PID24727::T:WLMTAGL:ON:WL:en-US:WWL_WIN_evergreen2:102009
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jbossws-users/attachments/20091030/cc1898c0/attachment.html 


More information about the jbossws-users mailing list