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

如何将参数从Apache CXF传递到Camel

常乐
2023-03-14
public class MyInterceptor extends AbstractSoapInterceptor {
    //..... some variables 

     @Override
     public void handleMessage(SoapMessage message) throws Fault {
        //..some logic  and then setting a variable

        message.getExchange().put("Foo", "Bar");
     }
 }

...下面的类是骆驼处理器,它最终被调用:

public class MyCamelProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        //how can I read information from CXF Intercptor here? 
        //how can I read "Foo" value?           
    }
}

我知道Apache CXF使用的Exchange类与Camel使用的Exchange不同,但是这两种集成技术之间应该有一种传递信息的方式?

共有1个答案

蒋承教
2023-03-14

最后,我解决了它如何遵循:

在我的上下文中,我有一个带有camel-cxf组件的使用者服务,它被路由到处理器。

Camel中的CxfEndpoint类有一个调用SetInInterceptors的方法:

public void setInInterceptors(List<org.apache.cxf.interceptor.Interceptor<? extends org.apache.cxf.message.Message>> interceptors)

因此,如果我们在bean定义文件中定义下一个:

...
<cxf:cxfEndpoint id="consumerId" 
    address="/myservice"
    serviceClass="com.example.service.MyServiceSEI">
    <cxf:inInterceptors>
        <ref bean="myInterceptor"/>
    </cxf:inInterceptors>
</cxf:cxfEndpoint> 

<bean id="myInterceptor" class="com.example.interceptors.MyInterceptor" />  

然后,在我们的自定义拦截器中,我们可以设置映射中的任何变量

...
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
...

public class MyInterceptor extends AbstractSoapInterceptor {
  public MyInterceptor() {
    super(Phase.RECEIVE);
  }

  @Override
  public void handleMessage(SoapMessage message) throws Fault {
    //..some logic  and then setting a variable

    message.getExchange().put("Foo", "Bar");
  }
}

最后,我们可以使用org.apache.cxf.message.Message类获取处理器中的变量,这与Exchange.getin()方法使用的org.apache.camel.Message不同

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.cxf.message.Message;
import org.apache.camel.component.cxf.common.message.CxfConstants;

public class MyCamelProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        //how can I read information from CXF Intercptor here? 
        //how can I read "Foo" value?
        Message cxfMessage = exchange.getIn().getHeader(CxfConstants.CAMEL_CXF_MESSAGE, Message.class); 
        String foo = (String) cxfMessage.getExchange().get("Foo");

        // read message from camel context
        org.apache.camel.Message inMessage = exchange.getIn();
        ...
    }
}
 类似资料:
  • 问题内容: 我已经编写了这个jQuery ajax方法,在下面调用了webmethod。除了作为用户对象的参数具有空字段之外,调用进行得很好。我在调试时可以在firebug中看到值,但它们无法通过webmethod中的User对象参数 我试图从jQuery方法传递给Webmethod的两个值是“ UserID”(Guid)和“ About”(字符串),它们都是User类的属性,但在服务端,是Use

  • 我搜索如何将springboot参数传递给spring批处理作业的解决方案,然后在我的Writer中获得参数的值。当我在writer中加载键时,键仍然为空。有人能帮帮我吗? 下面是我的批处理代码配置 还有我的作家 }

  • 我试图将一个参数从命令行传递到java类。我关注了这篇文章:http://gradle.1045684.n5.nabble.com/gradle-application-plugin-question-td5539555.html,但是代码对我来说不起作用(也许它不适合JavaExec?)。以下是我所尝试的: 上面硬编码的args值的输出是: 任何关于如何将命令行参数传递给gradle的指针都很感

  • 问题内容: 我想将值传递给javascript。如果可能的话,我该怎么办?如何在后备bean中接收它们? 问题答案:

  • 问题内容: 我们已经设置了一些参数来在Jenkins中执行构建(使用简单的“参数化构建”设置)。作业被设置为Maven测试。有没有办法以编程方式将这些参数传递到我们的Java代码中?我们需要基于通过Jenkins设置的参数来执行某些更新功能。 问题答案: 是的,您可以通过Maven执行将Jenkins参数传递给Java代码,如下所示: 请注意, $ JOB_PARAM_1 将捕获Jenkins上设

  • 问题内容: 我有3个版本:A-是控制流量的主版本B-注释者版本C- 将在BI要向A添加String参数后执行,因此用户将手动输入一些String,但我不确定如何我可以将此参数传递给B吗?可以说这是我的构建流程: build(“ B”)build(“ C”)我不知道如何将参数传递到B,我应该从构建流程还是从B构建配置中做到这一点,我该怎么做。 预先感谢亚历克斯 问题答案: 像这样: https://