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#...
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&a...