[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