in bindings/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java [261:342]
private void handleJBIFault(SoapMessage message, Element soapFault) {
try {
Document doc = DomUtil.createDocument();
Element jbiFault = DomUtil.createElement(doc, new QName(
CxfJbiConstants.WSDL11_WRAPPER_NAMESPACE,
JbiFault.JBI_FAULT_ROOT));
Node jbiFaultDetail = null;
if (message.getVersion() instanceof Soap11) {
NodeList nodeList = soapFault.getElementsByTagName("faultcode");
String faultCode = nodeList.item(0).getFirstChild()
.getTextContent();
String prefix = "";
if (faultCode.indexOf(":") != -1) {
prefix = faultCode.substring(0, faultCode.indexOf(":"));
}
String localName = faultCode
.substring(faultCode.indexOf(":") + 1);
message.put("faultcode", new QName(prefix, localName));
nodeList = soapFault.getElementsByTagName("faultstring");
message.put("faultstring", nodeList.item(0).getFirstChild()
.getTextContent());
nodeList = soapFault.getElementsByTagName("detail");
if (nodeList != null
&& nodeList.getLength() > 0
&& DomUtil.getFirstChildElement(nodeList.item(0)) != null) {
jbiFaultDetail = doc.importNode(DomUtil
.getFirstChildElement(nodeList.item(0)), true);
} else {
message.put("hasdetail", false);
nodeList = soapFault.getElementsByTagName("faultstring");
jbiFaultDetail = doc.importNode(nodeList.item(0)
.getFirstChild(), true);
}
} else {
NodeList nodeList = soapFault.getElementsByTagName("soap:Code");
String faultCode = DomUtil.getFirstChildElement(
nodeList.item(0)).getTextContent();
String prefix = "";
if (faultCode.indexOf(":") != -1) {
prefix = faultCode.substring(0, faultCode.indexOf(":"));
}
String localName = faultCode
.substring(faultCode.indexOf(":") + 1);
message.put("faultcode", new QName(prefix, localName));
nodeList = soapFault.getElementsByTagName("soap:Reason");
message.put("faultstring", DomUtil.getFirstChildElement(
nodeList.item(0)).getTextContent());
nodeList = soapFault.getElementsByTagName("soap:Detail");
if (nodeList != null
&& nodeList.getLength() > 0
&& DomUtil.getFirstChildElement(nodeList.item(0)) != null) {
jbiFaultDetail = doc.importNode(DomUtil
.getFirstChildElement(nodeList.item(0)), true);
} else {
message.put("hasdetail", false);
nodeList = soapFault.getElementsByTagName("faultstring");
jbiFaultDetail = doc.importNode(DomUtil
.getFirstChildElement(nodeList.item(0)), true);
}
}
SchemaInfo schemaInfo = getOperation(message).getBinding()
.getService().getSchema(jbiFaultDetail.getNamespaceURI());
if (schemaInfo != null && !schemaInfo.isElementFormQualified()
&& (jbiFaultDetail instanceof Element)) {
// that's unquailied fault
jbiFaultDetail = addEmptyDefaultTns((Element) jbiFaultDetail);
}
jbiFault.appendChild(jbiFaultDetail);
message.setContent(Source.class, new DOMSource(doc));
message.put("jbiFault", true);
} catch (Exception e) {
String eMessage = e.getMessage();
if (eMessage == null) {
eMessage = e.getClass().getName();
}
throw new RuntimeException("the fault message can't be parsed:" + eMessage);
}
}