Sven,

There are two ways to deal with the "detail":
1) Add getter and setter methods for each thing you want in the details
2) Add a getFaultInfo() method that returns a JAXB bean that would define your details. You also need a constructor with (String, bean) as the parameters.

The way to control everything else is to set the "cause" of your exception to be a javax.xml.ws.soap.SOAPFaultException. In that SOAPFaultException, you can set the actor, fault code, etc....

Dan



On Jul 22, 2008, at 7:15 PM, Sven Haiges wrote:

Hi Glen,

first of all thanx for the reply, sorry for mine taking that long but I was busy with other things.

Unfortunately I could not really use the link you provided in your email. Maybe this is because I do not create the WSDL myself but have it created by CXF (I assume that is the whole idea behind CXF, shield the developer from the complexity of WSDL, SOAP, etc.). So my service interface throws some exceptions, e.g. :

@WebService(targetNamespace="http://ac...../";)
public interface AccountService
{
public Long register(@WebParam(name="account") AccountDTO account) throws AccountException; public AccountDTO get(@WebParam(name="token") String token, @WebParam(name="id") Long id) throws InvalidSessionException, AccountException; public AccountDTO getSelf(@WebParam(name="token") String token) throws InvalidSessionException, AccountException; public void update(@WebParam(name="token") String token, @WebParam(name="account") AccountDTO account) throws InvalidSessionException;; public void delete(@WebParam(name="token") String token, @WebParam(name="id") Long id) throws InvalidSessionException;
...

You can see that some methods might throw a InvalidSessionException, some others an AccountException, etc.

Now looking at some tutorial from W3C Schools, each soap fault has:
http://www.w3schools.com/SOAP/soap_fault.asp

- faultcode,
- faultstring,
- faultactor,
- detail

To my surprise faultcode is a pretty basic list of just client/ server, etc. but I guess I have to live with that. I was hoping to be able to provide an own list, but that's Soap and I cannot change that.

So I assume that an Exception thrown by a sevice implementation is wrapped into a soap fault. the Faultcode will be server in this case (assuming CXF does this automaticaly), the faultstring would be the exception.getMessage() string, etc.

Is this correct? If so, how can I control faultactor and detail?

---

Maybe this is also just completely wrong. Should a service interface throw exceptions in the way I did it? In my case, I am just throwing a coarse-grained AccountException because I do not want to expose the real java exception to the outside world (potentially giving information to hackers on how to best attack, etc)

Thanx a lot for all, CXF is just exactly what I need and I totally appreciate the user list and the great help it provides.

Cheers
Sven

---
Sven Haiges
Y! Messenger / Skype: hansamann



----- Original Message ----
From: Glen Mazza <[EMAIL PROTECTED]>
To: [email protected]
Sent: Thursday, July 17, 2008 6:08:40 PM
Subject: Re: Soap Faults

For the first issue, yes, I would say the errors should have separate
namespaces even if they mean the same thing--if you're doing WSDL- first
each of their WSDL's should have separate target namespaces anyway.

For the second issue, this article[1] has both a wsdl-defined fault and
a generic SOAPFaultException, as well as service providers and clients
handling both of them. It may give you a little bit of coding guidance.

HTH,
Glen

[1] http://www.jroller.com/gmazza/date/20080308

On Thu, 2008-07-17 at 15:01 -0700, Sven Haiges wrote:
Hi all,

I realize something similar was just asked but still some of my issues are not solved.

My SOAP service may throw a few exceptions and as far as I understand, these Exception object will be converted automatically by CFX. I created a java client with wsdl2java and I can see the Exception classes automatically being generated. Now two issues:

- got 4 services, some of those service inerfaces share the same Exception class. Still, after generating 4 clients for the services, each client service package will have its own Exception class. This causes some confusion and will confuse the users later. Can I fix this with changeing the targetNameSpace or similar?

- I read about outFaultInterceptors, but could not find more documentation in the CXF user guide. Can someone point me to a really good resource about how to map java exceptions to soap faults?

Thanx
Sven

---
Sven Haiges
Y! Messenger / Skype: hansamann


---
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog




Reply via email to