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

如何在Camel中将头字符串传递给服务

秦城
2023-03-14
from("direct:marshal-xml")
 .marshal(jaxbDataFormat)
 .to("direct:validate-and-send");

根据名为“MessageType”的头属性,我们希望使用不同的jaxbDataFormat对象来封送至XML。我们可以在路由本身中进行选择,但我们希望使用一个专用服务,该服务接受字符串输入messageType,并返回正确的JAXBDataFormat。

现在的问题是如何将标头属性“MessageType”作为参数传递给服务。我们希望使用如下内容:

from("direct:marshal-xml")
 .marshal(jaxbDataFormatService.getDataFormat(getHeader("messageType")))
 .to("direct:validate-and-send");

但是我似乎无法从标题中获得作为字符串的messageType。对路由进行“建模”的routebuilder和从该模型生成的运行时路由之间似乎存在差异。

simple("${header.messageType}").evaluate(exchange, String.class);

共有1个答案

薛华容
2023-03-14

您总是可以实现自己的“复合数据格式”,例如,通过实现org.apache.camel.spi.dataformat,它将了解您想要使用的所有数据格式,并使用您想要的数据格式。

类似这样的东西,只是为了给你一个想法:

public class MyCompositeFormat implements DataFormat, CamelContextAware {

    public MyCompositeFormat(DataFormat... formats) {
        // store them to local variable
    }

    public CamelContext getCamelContext() {
        return camelContext;
    }

    public void setCamelContext(CamelContext camelContext) {
        this.camelContext = camelContext;
    }

    public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
      if (exchange.getIn().getHeader("SomeHeader",String.class).equals("whatever") {
        return someFormatYouStored.marshal(exchange,graph,stream);
      } else {
        return anotherFormat.marshal(exchange,graph,stream);
      }

    }

    public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
      // similar approach to marshal
    }

}

在你的路线上:

MyCompositeFormat myCompositeFormat = new MyCompositeFormat(otherFormats);
from("direct:marshal-xml")
 .marshal(myCustomFormat)
 .to("direct:validate-and-send");
 类似资料:
  • 问题内容: 我正在尝试通过使用JSON格式的字符串初始化Javascript变量来加载数据表。如果我声明: 那么我的表将正确加载该行。 我尝试在脚本之前初始化Java字符串,然后将该对象传递给Javascript变量,如下所示: 我的表无法识别这一点,并且在尝试以这种方式传递行时无法加载该行。如何正确地将Java字符串传递给Javascript,以便我的表能够加载数据? 问题答案: 尝试使用引号。

  • 问题内容: 我试图对一个javascript对象进行字符串化,然后将该字符串作为参数传递给Code Behind中的WebMethod。我无法正常工作,因为我收到500的内部服务器错误,并且stacktrace指出参数值丢失。 这是JavaScript代码: 这是网络方法: 好像我已经尝试了通过google搜索以及在此处找到的所有内容。 我还尝试了很多人参考的本指南:http : //encosi

  • 在Camel 2.10.1上,以下工作正常: 正在讨论的方法接受一个字符串参数 迁移到2.10.6,这不再起作用,它试图调用TEST作为另一个类。我尝试过用${}包装,尝试使用“ 我发现的唯一解决方案是使用常量语言将值放在标头中,然后使用简单调用标头。显然,这不是很干净... 你有什么想法怎么做吗? 干杯

  • 这个网页让我相信我可以将一个空字符串传递给,以关闭图形的y记号。 但是,当我尝试这样做时,我得到以下错误: 怎么回事?如果这种关闭y型刻度的方法是不正确的,那么正确的方法是什么?

  • 我试图通过C#代码传递此字符串,但失败了: soap:body1479374 System.xml.XmlDocument文档=新建System.xml.XmlDocument();Doc.LoadXML(字符串); 尝试发送作为整体和作为3个部分,但在A节内失败 string Sectiona=@“ soap:body ”; 字符串段B=“1479374”; 字符串节C=“”; 字符串数据=段A

  • 我有一个xml节点,我从一个xml文件中解析了它,其中包含以下代码 我必须将congigNode传递给另一个类中的方法。这个项目在Camel中,我必须测试一个类,它有一个接受configNode作为输入的方法。我是否在ProducerTemplate的发送体中添加configNode 或者在routebuilder的某个地方 我是骆驼队的新手,日子不好过。请帮忙!