16.13. 如何在 PAYLOAD 模式中获取和设置 SOAP 标头
我们已在 PAYLOAD 模式中以 CxfPayload 对象的形式显示如何以 CxfPayload 对象来访问 SOAP 消息,第 How to processing the message for a camel-cxf endpoint in PAYLOAD data format.
获取 CxfPayload 对象后,您可以调用返回 DOM Elements (SOAP 标头)列表的 CxfPayload.getHeaders ()方法。
例如,请参阅 CxfPayLoadSoapHeaderTest :
from(getRouterEndpointURI()).process(new Processor() {
@SuppressWarnings("unchecked")
public void process(Exchange exchange) throws Exception {
CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class);
List<Source> elements = payload.getBodySources();
assertNotNull(elements, "We should get the elements here");
assertEquals(1, elements.size(), "Get the wrong elements size");
Element el = new XmlConverter().toDOMElement(elements.get(0));
elements.set(0, new DOMSource(el));
assertEquals("http://camel.apache.org/pizza/types",
el.getNamespaceURI(), "Get the wrong namespace URI");
List<SoapHeader> headers = payload.getHeaders();
assertNotNull(headers, "We should get the headers here");
assertEquals(1, headers.size(), "Get the wrong headers size");
assertEquals("http://camel.apache.org/pizza/types",
((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI");
// alternatively you can also get the SOAP header via the camel header:
headers = exchange.getIn().getHeader(Header.HEADER_LIST, List.class);
assertNotNull(headers, "We should get the headers here");
assertEquals(1, headers.size(), "Get the wrong headers size");
assertEquals("http://camel.apache.org/pizza/types",
((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI");
}
})
.to(getServiceEndpointURI());
您还可以使用与子章节" How to set SOAP header in POJO 模式"中所述的方法相同,以设置或获取 SOAP 标头。因此,您可以使用标头 "org.apache.cxf.headers.Header.list" 获取和设置 SOAP 标头列表。这也意味着,如果您有一个路由从一个 Camel-cxf 端点转发到另一个 Camel-cxf 端点(SOAP Client