public void invoke(MessageContext context) throws Exception {
    XFireFault fault = (XFireFault) context.getExchange().getFaultMessage().getBody();

    Throwable cause = fault.getCause();
    OperationInfo op = null;

    if (context.getExchange() != null) op = context.getExchange().getOperation();

    if (cause == null || op == null) return;

    FaultInfo faultPart = getFaultForClass(op, cause.getClass());

    if (faultPart != null) {
      handleFault(context, fault, cause, (MessagePartInfo) faultPart.getMessageParts().get(0));
    }
  }