Talend - CXF MTOM文件传输无法正常工作(DataHandler没有no-arg默认构造函数)

时间:2014-10-06 14:57:56

标签: jaxb cxf apache-camel talend apache-karaf

我有一个慢慢开始让我疯狂的问题,所以任何帮助都会非常感激。我正在使用Talend ESB(基于ServiceMix和Camel)。在我的一条路线中,我需要使用MTOM通过网络服务发送文件。我使用带有jaxb绑定的camel-cxf组件。 不知怎的,我绝对不能让它工作。我得到的例外是:

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
javax.activation.DataHandler does not have a no-arg default constructor.

据我所知,这是因为JAXB-Marshaller需要一个无参数的构造函数(即使我认为我只是编组,从不解组),但我只是不知道如何处理它。试图通过在javax.activation.DataHandler上扩展来编写我自己的CustomDataHandler,因此异常消失了,但文件根本没有传输。还尝试使用像描述here这样的XML-Adapter,但也没有用。我甚至最终在eclipse中构建了一个jar项目,并使用maven-assembly-plugin来捆绑所有依赖项。那个JAR用在我的路线上。它在Eclipse或我从纯粹绝望中创建的webproject中运行良好,以证明JAR内容是finde。但无论我做什么,我都无法让它在Talend / Karaf容器中工作。

以下是相关的映射:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "document")
public class Document {
    @XmlElement(required = true)
    @XmlMimeType("application/octet-stream")
    private DataHandler dataHandler;
...

几乎忘记了一件事:它在Talend Studio中也运行良好。 “只是”不在运行时容器中。知道我能做些什么或者我如何解决它?提前谢谢!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。问题是,我使用我的捆绑包部署了一个JAR依赖项,该捆绑包也已经存在于OSGI-Container中。我想这导致了一些ClassLoader问题。异常是误导性的,但最终我所要做的就是将依赖性改为"提供"在我的pom.xml中