gpt4 book ai didi

java - Apache Camel 简单 http 示例

转载 作者:行者123 更新时间:2023-12-01 10:37:05 26 4
gpt4 key购买 nike

我对 Camel 还很陌生。我一直在尝试从 http 源获取数据。这是我的代码:

from("timer://runOnce?repeatCount=1")
.to("http4://webservice.com/example.xml")
.process(new structureXML())
.to("mock:resource")
.stop();

还有:

class structureXML implements Processor {

public void process(Exchange httpExchange) throws Exception {
String httpres = httpExchange.getIn().getBody(String.class);
String[] lines = httpres.split("\n");
Pattern p = Pattern.compile("<Map Key='(.+)' Value='(.+)'/>");
HashMap<String, Integer> mapdata = new HashMap<String, Integer>();

for(String line : lines) {
Matcher m = p.matcher(line);

if(m.find())
mapdata.put(m.group(1), Integer.parseInt(m.group(2)));
}

httpExchange.getIn().setBody(mapdata);
}
}

嗯,这个例子工作正常,但我想知道进一步改善这种情况的可能方法(例如使用 xpath 等进行 xml 处理),我还想知道如何在消息中存储 java 对象所以我可以在另一条 route 使用它(例如:direct:resource 而不是mock)

最佳答案

关于 java 对象:

更多信息可以在这里找到:http://camel.apache.org/data-format.html

  • JAXB
  • XStream
  • BeanIO
  • JiBX
  • XmlBean

这些数据格式对于将 XML 转换为 POJO 非常有用。我建议您尝试BeanIO(详细文档、许多示例等)。

关于 Xpath:

如果没有网络服务响应,很难说出任何指定的内容。

示例:

setBody().xpath("/soap:Envelope/soap:Body/s:insertResponse/s:data",
XmlNamespaces.getNamespace()).

关于您的示例:

你通常需要设置很多属性和 header (在http请求之前),所以它工作得很好。示例:

    setProperty(Exchange.CONTENT_TYPE).constant("application/soap+xml").
setProperty(Exchange.CONTENT_ENCODING).constant("gzip").
setProperty(Exchange.CHARSET_NAME).constant("utf-8").
setHeader(Exchange.CONTENT_TYPE).exchangeProperty(Exchange.CONTENT_TYPE).

而且我没有看到创建对网络服务的请求。借助 velocity ( http://camel.apache.org/velocity.html ),或者使用 SOAP 日期格式 ( http://camel.apache.org/soap.html ),这很容易做到。

您可以使用 jetty ( http://camel.apache.org/jetty.html ) 代替 http4 (对我来说更容易)

关于java - Apache Camel 简单 http 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com