Hie.

Here is my problem :

I have a webservice defined in an OpenEJB server (embedded CXF and JAXB-WS)

This webservice declares a method that throws a checked exception that
is declared as a @WebFault.

When the client calls the server and when the webmethod sends an
exception, the client receives a generic SoapFaultException with an
ApplicationException inside.
I expected my client to receive my business checked exception...

After having investigated a little bit, it appears that the
WebFaultOutInterceptor class in the bundled CXF version works as
follow :

When a fault is generated, it gets the cause. If the cause (or one of
it's parents) is annotated as a WebFault, a SOAP Fault containing the
correct webfault is formatted and sent and the client receives the
correct checked exception type as a result.

If not, it formats a default SOAP Fault with the message of the exception.
So the client receives a generic SOAPFaultException.

If I use CXF as a standalone server without OpenEJB, my exception is
correctly catched in the WebFaultOutInterceptor and as it is @WebFault
anotated, formats the corresponding soap fault.

In OpenEJB, when the exception appears on the server, the Stateless
container catches it, processes it  and chains it to the transaction
manager which in the end throws a new ApplicationException with my
exception as a cause.
But what the WebFaultOutInterceptor receives in this case is an
ApplicationException, which is NOT a @WebFault. So the interceptor
proceses this exception as a generic non-checked exception. Hence the
non typed exception on the client side...

Having realized that I tried to skip the new ApplicationException generation
by

1- marking my stateless webservice as nontransactional

@Stateless
@WebService(...)
@TransactionManagement(TransactionManagementType.BEAN)
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
class MyClass ...

2 - marking my exception as @ApplicationException

as it was my understanding of the specifications that
@ApplicationException should be re-thrown by the container as-is...

both actions where desperately useless...

So what can I do to have my server sending checked types ?

Thanks anyway for the time you will spend on that problem.
-- 
View this message in context: 
http://www.nabble.com/exceptions-handling-with-Webservices-tp19668275p19668275.html
Sent from the OpenEJB User mailing list archive at Nabble.com.

Reply via email to