JSt*_*fan 5 java apache-camel cxfrs
在IBM WebSphere上运行的Web项目中的ServletContextListener中进行以下工作Camel流设置后,传入的XML将转换为JSON并打印到System.out并打印到report.txt.到现在为止还挺好.
@WebListener
public class SetupCamel implements ServletContextListener {
private CamelContext camelContext;
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("SetupCamel:contextInitialized - enter");
try {
Context ctx = new InitialContext();
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("jms/TestConnectionFactory");
camelContext = new DefaultCamelContext();
JmsConfiguration jmsConfiguration = new JmsConfiguration(qcf);
JmsComponent jmsComponent = new JmsComponent(jmsConfiguration);
camelContext.addComponent("jms", jmsComponent);
final XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
xmlJsonFormat.setEncoding("UTF-8");
xmlJsonFormat.setForceTopLevelObject(false);
xmlJsonFormat.setTrimSpaces(true);
xmlJsonFormat.setRootName("newRoot");
xmlJsonFormat.setSkipNamespaces(true);
xmlJsonFormat.setRemoveNamespacePrefixes(true);
camelContext.addRoutes(new RouteBuilder() {
public void configure() {
onException(Exception.class)
.to("log:GeneralError?level=ERROR")
.end();
from("jms:queue:TestQueue?concurrentConsumers=1")
.marshal(xmlJsonFormat)
.to("file:/tmp/messages?fileName=report.txt&fileExist=Append")
.to("stream:out")
;
}
});
camelContext.start();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SetupCamel:contextInitialized - leaving");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("SetupCamel:contextDestroyed - enter");
try {
if (camelContext != null) {
camelContext.stop();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SetupCamel:contextDestroyed - leaving");
}
}
Run Code Online (Sandbox Code Playgroud)
我必须扩展流程以将JSON POST到REST服务/使用者.(Rest资源经过测试并正常运行..)
搜索(web)文档并没有给我一个我能够使用的好的/完整的Java DSL示例.根据我的确发现,我认为它应该类似于添加端点,如:
.to("cxfrs://http://localhost:9080/WebContext/TestResource")
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我不明白如何将转换后的JSON设置为正文并使其成为POST请求.印刷也没有例外.
如何在此流程中将REST调用添加为具有JSON主体的POST?
在IBM WebSphere v8.5.5中运行,IBM jdk 1.7x,Camel 2.11.2
以下jar文件位于WEB-INF/lib类路径中:
camel-core-2.11.2.jar
camel-cxf-2.11.2.jar
camel-cxf-transport-2.11.2.jar
camel-jms-2.11.2.jar
camel-servletlistener-2.11.2.jar
camel-spring-2.11.2.jar
camel-stream-2.11.2.jar
camel-xmljson-2.11.2.jar
com.ibm.ws.prereq.jackson.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
cxf-api-2.7.6.jar
cxf-rt-frontend-jaxrs-2.7.6.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
slf4j-api-1.7.5.jar
spring-beans-3.1.4.RELEASE.jar
spring-context-3.1.4.RELEASE.jar
spring-core-3.1.4.RELEASE.jar
spring-jms-3.1.4.RELEASE.jar
spring-tx-3.1.4.RELEASE.jar
xom-1.2.5.jar
Run Code Online (Sandbox Code Playgroud)
谢谢.
如果您只想将 JSON 消息发布到 REST 服务,则不需要使用camel-cxfrs 组件,因为您已经有了请求消息正文,您只需要使用camel-http 端点来发送请求。
所以路线可以是
from("jms:queue:TestQueue?concurrentConsumers=1")
.marshal(xmlJsonFormat)
.to("http://localhost:9080/WebContext/TestResource");
Run Code Online (Sandbox Code Playgroud)