jaxb - Camel POJO 产生 JAXB 数据格式异常

标签 jaxb apache-camel jaxb2

我正在使用 Camel 2.10.3

这是我的 Camel 背景:

  <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">

    <endpoint id="webserviceStart" uri="direct:webserviceStart"/>

    <dataFormats>
      <jaxb id="jaxb" prettyPrint="true"
        contextPath="com.jaxbtest.package" />
    </dataFormats>

    <route id="myRoute">
      <from ref="webserviceStart" />
      <marshal ref="jaxb" />
      <to uri="spring-ws:http://wshost:8010/service"/>
      <unmarshal ref="jaxb" />
    </route>

  </camelContext>

此代码有效:
@Component
public class WebserviceClient
{
    @EndpointInject( ref = "webserviceStart" )
    ProducerTemplate _producer;

    public Response invoke( Request input )
    {
        return ( Response ) _producer.sendBody( input ).getOut().getBody();
    }
}

此代码(遵循 http://camel.apache.org/pojo-producing.html 的“使用 @Produce 从代码中隐藏 Camel API”部分)不会:
@Component
public class WebserviceClient
{
    public static interface MyWebservice
    {
      Response invoke( @Body Request body );
    }

    @EndpointInject( ref = "webserviceStart" )
    MyWebservice _producer;

    public Response invoke( Request input )
    {
        return ( Response ) _producer.invoke( input );
    }
}

它抛出一个异常:
Caused by: java.io.IOException: javax.xml.bind.JAXBException: class org.apache.camel.component.bean.BeanInvocation nor any of its super class is known to this context.
    at org.apache.camel.converter.jaxb.JaxbDataFormat.marshal(JaxbDataFormat.java:103)
    at org.apache.camel.processor.MarshalProcessor.process(MarshalProcessor.java:59)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)

如果这是 Camel 中的一个已知错误,有人知道与之相关的问题吗?我应该为此创建一个新的 JIRA 吗?这似乎是一个 POJO 生产的简单用例。

最佳答案

通常,当您收到此错误时,表示您尚未在 JAXB 上下文中设置类列表。

你会在 JAVA DSL 中做 -

 JAXBContext context =  JAXBContext.newInstance('your classes');
            JaxbDataFormat jaxb = new JaxbDataFormat();
            jaxb.setContext(context);

然后使用您的自定义数据格式“jaxb”作为您的编码(marshal)/解码员引用。

谢谢!

关于jaxb - Camel POJO 产生 JAXB 数据格式异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16269965/

相关文章:

java - JAXB 2.x : How to override an XmlElement annotation from parent class - Mission Impossible?

java - JAXB XMLAdapter 编码问题

jaxb - 将 xml 解码为对象列表

binding - JAXB XJC 两个声明导致冲突。无法兑现自定义绑定(bind)

java - 尝试编码 VBox 子类时发生 IllegalAnnotationExceptions

java - 端点的 Camel 处理器

apache-camel - 来自 Camel 的recipientList EIP的异常未在路由级别捕获

java - XJC 的最新官方版本是什么,我在哪里可以得到它?

apache-camel - Apache Camel : exchange. getException() 与 CamelExceptionCaught 属性

java - 在 Spring MVC Controller 中注入(inject) Jaxb2Marshaller