当前位置: 首页 > 知识库问答 >
问题:

Camel和CXF生产者终结点

马清野
2023-03-14

我正在尝试向外部SOAP服务发送SOAP消息。我需要做的是用SOAP消息包装一个xml字符串,并添加一些SOAP头以进行身份验证。现在我正在使用:

<cxf:cxfEndpoint id="someEndpoint" wsdl="someWSDL.wsdl"
                 address="http://someAddress:9999/service.asmx"/>

<camelContext>
    <route>
        <from uri="vm-someChannel">
        <to uri="cxf:bean:someEndpoint?dataFormat=PAYLOAD"/>
    </route>
</camelContext>

这是可行的,但我还需要包括soap头。有效负载模式只发送带有主体的soap信封。我曾尝试使用拦截器注入头,但它被忽略了。

有可能有一个带有有效负载模式的肥皂标题部分吗?如果没有,完成我正在尝试做的事情的最简单方法是什么?

谢谢

共有1个答案

马德宇
2023-03-14

是的,您可以在有效负载模式下获取和设置SOAP标头,更多信息请参见-http://camel.apache.org/cxf.html#CXF-如何设置PayLoadMode中的OAPHeaders

在发送到CXF beanendpoint之前,可以在bean或处理器中执行此操作

编辑:添加代码示例

@Override 
public void process(Exchange exchange) throws Exception {

    Message out = exchange.getOut();
    if (out.getHeader(Header.HEADER_LIST) == null) {
        out.setHeader(Header.HEADER_LIST, new ArrayList<SoapHeader>());
    }

    List<SoapHeader> headers = CastUtils.cast((List<?>)out.getHeader(Header.HEADER_LIST));

    try {

        SoapHeader header = new SoapHeader(new QName("Header Name"), "Header Value");
        header.setDirection(Direction.DIRECTION_OUT);
        header.setMustUnderstand(true);
        soapHeaders.add(header);     

    } catch (JAXBException e) {
        e.printStackTrace();
    }
}

SoapHeader文档-此处

您需要使用QName正确构建标头

 类似资料:
  • 我试图建立以下路线。 实际上,我希望用Servlet组件接收请求,做一些事情(处理器、转换等,但为了简单起见,我在这里排除了),将其重定向到我的WebService实现,然后文件组件将文件的内容返回到WebService。 如果作为第一个配置进行配置,servlet组件接收请求,路由到cxf:consumer,然后启动对cxf:producer的TCP调用,该调用在''中定义。 有办法实现我想要的

  • 我想使用一个camel组件,它提供了使用和生成RESTful资源的能力。 对于这个例子,我想使用camel restlet组件。restlet组件一切正常,我已经使用REST DSL成功地实现了restlet consumer。然而,我有几个问题: 问题 1) 将restlet启用为异步是否安全?我读过restlet async可能会导致一些问题。这仍然正确吗?如何提高服务绩效?我应该改用码头吗?

  • 我正在测试使用Apache Camel在Kafka(0.8.2.1)上发送消息的simple producer。我在Camel中使用java DSL创建了endpoint。 现在我想使用Apache Camel提供的ProducerTempalte在kafka上发送消息。但我在运行该程序时得到以下错误注意:Zookeeper和Kafka已启动并可以使用Kafka控制台生成/消费消息。 我猜这些属性

  • 我正在使用apache camel,希望有多条路由。路线如下。

  • 您好,我的基本要求是有一个可以发送消息的路由,并将其放在JMS队列中。camel上下文在JavaEE 6容器中运行,即JBoss AS 7.1.1,因此它附带了HornetQ for JMS;我通过引导单例启动上下文,但我不使用camel cdi。到目前为止,我一直在使用camel-jms组件,但现在我希望尽可能迁移到camel-sjms,因为springless。 我的问题是:在这个JavaEE

  • 我创建了两个apache camel(blueprint XML)kafka项目,一个是kafka-producer(接受请求并将其存储在kafka服务器中),另一个是kafka-consumer(从kafka服务器获取ups消息并处理它们)。 这个设置对单个主题和单个消费者都很有效。然而,我如何在同一个Kafka主题中创建单独的消费者组?如何在不同的消费者群体中路由同一主题中的多个消费者特定消息