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(对我来说更容易)
我对 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(对我来说更容易)