CXF soap faults for unmarshalling errors do not contain information useful in
locating the error. How can I improve the soap fault's faultString, so that
it contains more useful info?  It's unclear whether an interceptor or other
component will be able to improve this content.  

For example, suppose we have a WSDL input message containing element of type
xsd:dateTime. When we pass an invalid content, "xxxx", the faultString
contains: 
Unmarshalling Error: xxxx .  

The full stack trace contains messages with location of the bad string, i.e.
: 
 [com.sun.istack.SAXParseException2; lineNumber: 5; columnNumber: 38; xxxx].  

However, the fault only displays the message from the  original failure, in
this case, [java.lang.IllegalArgumentException: xxxx].

The problems is in this fragment in JAXBEncodeDecoder, which extracts the
message from the linked exception, i.e., the last exception in the stack:
       } catch (PrivilegedActionException e) {
            Exception ex = e.getException();
            if (ex instanceof Fault) {
                throw (Fault)ex;
            }
            if (ex instanceof javax.xml.bind.UnmarshalException) {
                javax.xml.bind.UnmarshalException unmarshalEx =
(javax.xml.bind.UnmarshalException)ex;
                if (unmarshalEx.getLinkedException() != null) {
                    throw new Fault(new Message("UNMARSHAL_ERROR", LOG, 
                                           
unmarshalEx.getLinkedException().getMessage()), ex);




--
View this message in context: 
http://cxf.547215.n5.nabble.com/Unmarshalling-error-content-usability-tp5755169.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to