Apache 骆驼简单的 http 示例

Apache camel simple http example

我对 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);
    }
}

这个例子很好用,但我想知道进一步改善这种情况的可能方法(例如 xml 使用 xpath 等处理),我也想知道我可以存储的方法消息中的 java 对象,以便我可以在另一条路线中使用它(例如:direct:resource 而不是模拟)

关于java objects:

可在此处找到更多信息:http://camel.apache.org/data-format.html

  • JAXB
  • XStream
  • BeanIO
  • JiBX
  • XmlBeans

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

关于 Xpath:

如果没有 web-service 响应,很难说出任何指定的内容。

示例:

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).

而且我没有看到创建对 web-service 的请求。在 velocity (http://camel.apache.org/velocity.html), or, maybe, using SOAP date format (http://camel.apache.org/soap.html).

的帮助下很容易做到

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