in bindings/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java [928:1041]
public void handleMessage(final Message message) throws Fault {
MessageExchange exchange = message
.getContent(MessageExchange.class);
Exchange ex = message.getExchange();
if (exchange.getStatus() == ExchangeStatus.ERROR) {
throw new Fault(exchange.getError());
}
if (!ex.isOneWay()) {
if (exchange.getFault() != null) {
Fault f = null;
if (isUseJBIWrapper()) {
f = new JbiFault(
new org.apache.cxf.common.i18n.Message(
"Fault occured", (ResourceBundle) null));
if (exchange.getProperty("faultstring") != null) {
f.setMessage((String)exchange.getProperty("faultstring"));
}
if (exchange.getProperty("faultcode") != null) {
f.setFaultCode((QName) exchange
.getProperty("faultcode"));
}
if (exchange.getProperty("hasdetail") == null) {
Element details = toElement(exchange.getFault()
.getContent());
f.setDetail(details);
}
} else {
Element details = toElement(exchange.getFault()
.getContent());
if (isUseSOAPEnvelope()) {
details = (Element) details.getElementsByTagNameNS(
details.getNamespaceURI(), "Body").item(0);
assert details != null;
details = (Element) details.getElementsByTagNameNS(
details.getNamespaceURI(), "Fault").item(0);
}
assert details != null;
NodeList reason = details.getElementsByTagName("faultstring");
NodeList code = details.getElementsByTagName("faultcode");
if (exchange.getProperty("faultstring") != null) {
details = (Element) details.getElementsByTagName("faultstring").item(0);
} else {
details = (Element) details.getElementsByTagName("detail").item(0) == null ?
(Element) details.getElementsByTagName("soap:Detail").item(0):
(Element) details.getElementsByTagName("detail").item(0);
}
assert details != null;
f = new SoapFault(
new org.apache.cxf.common.i18n.Message(
"Fault occured", (ResourceBundle) null),
new QName(details.getNamespaceURI(), "detail"));
f.setDetail(details);
if (exchange.getProperty("faultstring") != null) {
f.setMessage((String)exchange.getProperty("faultstring"));
} else {
if (reason != null && reason.item(0) != null
&& ((Element)reason.item(0)).getTextContent() != null) {
f.setMessage(((Element)reason.item(0)).getTextContent());
}
}
if (exchange.getProperty("faultcode") != null) {
f.setFaultCode((QName) exchange
.getProperty("faultcode"));
}
}
processFaultDetail(f, message);
message.put(BindingFaultInfo.class, faultWanted);
throw f;
} else if (exchange.getMessage("out") != null) {
Endpoint endpoint = ex.get(Endpoint.class);
Message outMessage = ex.getOutMessage();
if (outMessage == null) {
outMessage = endpoint.getBinding().createMessage();
ex.setOutMessage(outMessage);
}
outMessage.setContent(MessageExchange.class, exchange);
outMessage.put("needSetDone", message.get("needSetDone"));
NormalizedMessage norMessage = (NormalizedMessage) exchange
.getMessage("out");
if (outMessage instanceof SoapMessage) {
AddressingProperties addressingProperties = WSAUtils
.getCXFAddressingPropertiesFromMap((Map<String, String>) norMessage
.getProperty(WSAUtils.WSA_HEADERS_OUTBOUND));
outMessage.put(WSAUtils.WSA_HEADERS_OUTBOUND,
addressingProperties);
}
List<Attachment> attachmentList = new ArrayList<Attachment>();
outMessage.setContent(Source.class, exchange.getMessage(
"out").getContent());
Set attachmentNames = norMessage.getAttachmentNames();
Iterator iter = attachmentNames.iterator();
while (iter.hasNext()) {
String id = (String)iter.next();
DataHandler dh = norMessage.getAttachment(id);
attachmentList.add(new AttachmentImpl(id, dh));
}
outMessage.setAttachments(attachmentList);
}
}
}