protected void processFaultDetail(XFireFault fault, MessageContext context)
throws Exception
{
Element exDetail = (Element) fault.getDetail().getChildren().get(0);
MessagePartInfo faultPart = getFaultPart(context.getExchange().getOperation(),
exDetail);
if (faultPart == null || faultPart.getTypeClass() == null)
return;
BindingProvider provider = context.getService().getBindingProvider();
JDOMStreamReader reader = new JDOMStreamReader(exDetail);
reader.nextTag();
Object e = (Object) provider.readParameter(faultPart, reader, context);
if (!(e instanceof Exception))
{
Class exClass = ((FaultInfo) faultPart.getContainer()).getExceptionClass();
Constructor constructor = exClass.getConstructor(new Class[] {String.class, faultPart.getTypeClass()});
e = constructor.newInstance(new Object[] {fault.getMessage(), e});
}
context.getExchange().getFaultMessage().setBody(e);
}