// if we find a match, this element is the fault data
MessageContext msgContext = context.getMessageContext();
SOAPConstants soapConstants = msgContext.getSOAPConstants();
OperationDesc op = msgContext.getOperation();
if (op != null) {
FaultDesc faultDesc = op.getFaultByQName(qn);
// allow fault type to be denoted in xsi:type
if (faultDesc == null) {
QName type = context.getTypeFromAttributes(namespace,
name,
attributes);
if (type != null) {
faultDesc = op.getFaultByXmlType(type);
}
}
if (faultDesc != null) {
// Set the class
try {
Class faultClass = ClassUtils.forName(faultDesc.getClassName());
builder.setFaultClass(faultClass);
} catch (ClassNotFoundException e) {
// Just create an AxisFault, no custom exception
}
builder.setWaiting(true);
// register callback for the data, use the xmlType from fault info
Deserializer dser = null;
if (attributes.getValue(soapConstants.getAttrHref()) == null) {
dser = context.getDeserializerForType(faultDesc.getXmlType());
} else {
dser = new DeserializerImpl();
dser.setDefaultType(faultDesc.getXmlType());
}
if (dser != null) {
dser.registerValueTarget(new CallbackTarget(this, "faultData"));
}
return (SOAPHandler)dser;