在Camel中使用封送处理将对象转换为xml

在Camel中使用封送处理将对象转换为xml,xml,apache-camel,pojo,Xml,Apache Camel,Pojo,我目前有工作代码,但我想它并没有以一种有效的方式使用Camel。我想知道是否有人可以帮助我使用驼峰中的封送功能。现在我基本上是调用定制Java代码来完成这项工作。在过去的两天里,我一直试图在没有这种自定义Java代码的情况下获得它,但我一直遇到一些我真的不太理解的问题。我认为,如果有人看到一些有用的东西,告诉我如何用几行路由替换掉大部分代码,会更容易一些 这是我的路线 这是我的第一个java类/bean package tutorial.simple.route; 导入java.io.S

我目前有工作代码,但我想它并没有以一种有效的方式使用Camel。我想知道是否有人可以帮助我使用驼峰中的封送功能。现在我基本上是调用定制Java代码来完成这项工作。在过去的两天里,我一直试图在没有这种自定义Java代码的情况下获得它,但我一直遇到一些我真的不太理解的问题。我认为,如果有人看到一些有用的东西,告诉我如何用几行路由替换掉大部分代码,会更容易一些

这是我的路线


这是我的第一个java类/bean

package tutorial.simple.route;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
导入org.apache.camel.CamelContext;
导入org.apache.camel.Exchange;
导入org.apache.camel.Handler;
导入org.apache.camel.Message;
导入org.apache.camel.impl.DefaultCamelContext;
导入org.apache.log4j.Level;
导入org.apache.log4j.Logger;
@XmlRootElement
公共类MockSql实现了可序列化{
私有字符串name=“name”;
私有字符串job=“job”;
私有静态最终记录器log=Logger.getLogger(“mockSql”);
ArrayList ary=新的ArrayList();
public MockSql()引发异常{
//CamelContext=新的DefaultCamelContext();
log.setLevel(Level.DEBUG);
log.debug(“构造的模拟sql\n\n”);
}
@处理者
public void populate(Exchange ex)引发异常{
MockSql m=新的MockSql();
m、 name=“我的名字”;
m、 job=“我的工作”;
例如,getIn().setBody(m);
调试(“填充的模拟sql”);
}
@XmlElement
公共字符串getName(){
返回名称;
}
@XmlElement
公共字符串getJob(){
返回工作;
}
}
我的第二颗豆子

package tutorial.simple.route;
导入java.io.File;
导入org.apache.camel.Exchange;
导入org.apache.camel.Processor;
导入org.apache.log4j.Level;
导入org.apache.log4j.Logger;
导入javax.xml.bind.JAXBContext;
导入javax.xml.bind.JAXBException;
导入javax.xml.bind.Marshaller;
公共类sqlToXml实现处理器{
私有静态最终记录器log=Logger.getLogger(“mockSql”);
@凌驾
公共作废进程(Exchange arg0)引发异常{
System.out.println(“MyProcessor已启动”);
/*字符串myString=arg0.getIn().getBody(String.class);
log.setLevel(Level.DEBUG);
log.debug(myString)*/
MockSql m=arg0.getIn().getBody(MockSql.class);
log.setLevel(Level.DEBUG);
log.debug(m.getName());
试一试{
//创建JAXB上下文并初始化封送拆收器
JAXBContext JAXBContext=JAXBContext.newInstance(MockSql.class);
Marshaller jaxbMarshaller=jaxbContext.createMarshaller();
//用于获得良好的格式化输出
setProperty(Marshaller.JAXB_格式化的_输出,Boolean.TRUE);
//指定要创建的xml文件的位置和名称
File XMLfile=新文件(“C:\\Users\\myname\\Desktop\\myxml.xml”);
字符串x;
//写入XML文件
jaxbMarshaller.marshal(m,XMLfile);
//写入控制台
jaxbMarshaller.marshal(m,System.out);
}捕获(JAXBEException e){
//出现了一些异常
e、 printStackTrace();
}
}
}
因此,我试图使这更像“骆驼”,如下所示:


我得到以下错误:

[ERROR]无法执行目标org.apache.camel:camel maven插件:2.12.0.redhat-610379:在项目简单路由上运行(默认cli):null:MojoExecutionException:InvocationTargetException:org.apache.camel.util.ObjectHelper.notNull(Ljava/lang/Object;Ljava/lang/String;)V->[Help 1

堆栈跟踪:

[INFO] <<< camel-maven-plugin:2.12.0.redhat-610379:run (default-cli) @ simple-route <<<
[INFO] 
[INFO] --- camel-maven-plugin:2.12.0.redhat-610379:run (default-cli) @ simple-route ---
[INFO] Using org.apache.camel.spring.Main to initiate a CamelContext
[INFO] Starting Camel ...
[pache.camel.spring.Main.main()] MainSupport                    INFO  Apache Camel 2.12.0.redhat-610379 starting
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Apache Camel 2.12.0.redhat-610379 (CamelContext: camel) is starting
[pache.camel.spring.Main.main()] ManagedManagementStrategy      INFO  JMX is enabled
[pache.camel.spring.Main.main()] DefaultTypeConverter           INFO  Loaded 176 type converters
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance.
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
[ERROR] *************************************
[ERROR] Error occurred while running main from: org.apache.camel.spring.Main
[ERROR] 
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:487)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoSuchMethodError: org.apache.camel.util.ObjectHelper.notNull(Ljava/lang/Object;Ljava/lang/String;)V
    at org.apache.camel.converter.jaxb.JaxbDataFormat.doStart(JaxbDataFormat.java:247)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
    at org.apache.camel.processor.MarshalProcessor.doStart(MarshalProcessor.java:118)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:79)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
    at org.apache.camel.processor.RedeliveryErrorHandler.doStart(RedeliveryErrorHandler.java:1154)
    at org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:41)
    at org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:28)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
    at org.apache.camel.processor.interceptor.DefaultChannel.doStart(DefaultChannel.java:153)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:61)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
    at org.apache.camel.processor.MulticastProcessor.doStart(MulticastProcessor.java:994)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:79)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
    at org.apache.camel.impl.RouteService.startChildService(RouteService.java:329)
    at org.apache.camel.impl.RouteService.warmUp(RouteService.java:158)
    at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:2150)
    at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:2080)
    at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1868)
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1740)
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1579)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1547)
    at org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:221)
    at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:118)
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:303)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:96)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:948)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:94)
    at org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:176)
    at org.apache.camel.spring.Main.doStart(Main.java:140)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.main.MainSupport.run(MainSupport.java:148)
    at org.apache.camel.main.MainSupport.run(MainSupport.java:352)
    at org.apache.camel.spring.Main.main(Main.java:73)
    ... 6 more

[信息]
java.lang.NoSuchMethodError
表示库不匹配。如果所有Camel库使用相同的版本,请检查Maven/Gradle/Ivy依赖项。

我认为您需要在路由中使用解组而不是封送。

您能发布整个堆栈跟踪吗?我对此有一些经验,可以可能会有帮助。您还可以展示JAXB生成的XML吗?