Hi, I spent couple of last days, debugging CXF and trying to intercept/inject custom fault response but I give up. I need your help guys.
I am currently getting this kind of response when an exception is thrown (either in In or Out interceptor). <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>blahblah</faultcode> <faultstring>exception message</faultstring> </soap:Fault> </soap:Body> </soap:Envelope> I would like to send a custom response as (example): <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <MessageHeader> .... </MessageHeader> </soap:Header> <soap:Body> <Response> <Data> <Status>Failure</Status> <ErrorMessage></ErrorMessage> </Response> </soap:Body> </soap:Envelope> How can I do it in the easiest way? Let's assume that my Response and MessageHeader are Java beans with JAXB annotations so I can use JAXB binding. The only thing I succeeded at the moment is to add custom header but I can't help changing the Body part. Anyway, customizing the header part was not obvious: @Override public void handleFault(SoapMessage message) { ... message.getExchange().setOutMessage(inMessage); Map<String, List<String>> headers = (Map<String, List<String>>) inMessage.get(Message.PROTOCOL_HEADERS); headers.remove("Content-Length"); Header header = new Header(Constants.HEADER_QNAME, msgHeader, jaxbBinding); message.getHeaders().add(header); } I had to clean "Content-Length" header (otherwise CXF was copying the value of this header from the HTTP request and my response was cut in the middle as the length was wrong) and set inMessage as outMessage Many thanks for help. Przemyslaw Bielicki