[jboss-user] [JBoss Web Services Users] - custom fault mapping with jax-rpc‏

newmanw10 do-not-reply at jboss.com
Fri Oct 30 11:45:25 EDT 2009

Sorry posted this in the CXF forum, this is probably a better place.  Not sure how to remove the CXF post on this subject.

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  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  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");
  |       }

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4263201#4263201

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4263201

More information about the jboss-user mailing list