29.14. 如何在 PAYLOAD 模式中获取和设置 SOAP 标头


我们已展示了如何在 PAYLOAD 模式中以 CxfPayload 对象的形式访问 SOAP 消息,以 PAYLOAD 数据格式处理 camel-cxf 端点 的消息。

获取 CxfPayload 对象后,您可以调用 CxfPayload.getHeaders ()方法,该方法返回 DOM Elements (SOAP 标头)列表。

例如,请参阅 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());
Copy to Clipboard Toggle word wrap

您还可以使用与子章节"如何在 POJO 模式中设置 SOAP 标头"中所述的方法设置或获取 SOAP 标头。因此,您可以使用标头 "org.apache.cxf.headers.Header.list" 获取和设置 SOAP 标头列表。这也意味着,如果您有一个从一个 Camel-cxf 端点转发到另一个 Camel-cxf 端点的路由,现在也会将 SOAP 客户端发送的 SOAP 标头转发到 CXF 服务。如果您不希望这些标头被转发,则必须在 Camel 标头 "org.apache.cxf.headers.Header.list" 中删除它们。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat