2 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果 cxf 端點(diǎn)配置為在 DataFormat.PAYLOAD 中工作,則:
.process(exchange -> {
CxfPayload body = exchange.getIn().getBody(CxfPayload.class);
for (Object header : body.getHeaders()) {
SoapHeader soapHeader = (SoapHeader) header;
org.w3c.dom.Element element = (Element) soapHeader.getObject();
//parse elements
}
});
如果在原始模式下,只需使用 xpath 讀取輸入流并將數(shù)據(jù)解析為 xml
升級(jí)版:
示例路線:
CxfEndpoint endpoint = new CxfEndpoint();
endpoint.setDataFormat(DataFormat.PAYLOAD);
endpoint.setWsdlURL("etc/Proxy.wsdl");
endpoint.setAddress("http://localhost:8089/wsservice/");
getContext().getRegistry().bind("cxfend", endpoint);
from("cxf:bean:cxfend")
.process(exchange -> {
CxfPayload body = exchange.getIn().getBody(CxfPayload.class);
for (Object header : body.getHeaders()) {
SoapHeader soapHeader = (SoapHeader) header;
org.w3c.dom.Element element = (Element) soapHeader.getObject();
Element transactionID = (Element) element.getElementsByTagName("ns1:TransactionID").item(0);
log.info("Header TransactionID with value:{}", transactionID.getTextContent());
}
});
輸出:
2020-03-03 11:43:03,327 [main ] INFO Server
- jetty-9.4.21.v20190926; built: 2019-09-26T16:41:09.154Z; git:
72970db61a2904371e1218a95a3bef5d79788c33; jvm 1.8.0_232-b18
2020-03-03 11:43:03,377 [main ] INFO AbstractConnector
- Started ServerConnector@b016b4e{HTTP/1.1,[http/1.1]}{localhost:8089}
2020-03-03 11:43:03,377 [main ] INFO Server
- Started @3403ms
2020-03-03 11:43:03,400 [main ] INFO ContextHandler
- Started o.e.j.s.h.ContextHandler@1b15f922{/wsservice,null,AVAILABLE}
2020-03-03 11:43:03,400 [main ] INFO DefaultCamelContext
- Route: route1 started and consuming from: cxf://bean:cxfend
2020-03-03 11:43:03,406 [main ] INFO DefaultCamelContext
- Total 1 routes, of which 1 are started
2020-03-03 11:43:03,408 [main ] INFO DefaultCamelContext
- Apache Camel 3.0.1 (CamelContext: camel-1) started in 1.953 seconds
2020-03-03 11:43:10,068 [tp1299661385-22] INFO TypeUtil
- JVM Runtime does not support Modules
2020-03-03 11:43:10,196 [tp1299661385-22] INFO RouteTest
- Header TransactionID with value:01

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
那是我的解決方案:
List<SoapHeader> soapHeaders = (List)exchange.getIn().getHeader("org.apache.cxf.headers.Header.list");
Element header = ((Element)soapHeaders.get(0).getObject());
String eventType = (String)header.getElementsByTagName("TransactionID").item(0).getTextContent();
exchange.getIn().setHeader("TYPE_EVENT",eventType);
添加回答
舉報(bào)