JAXB/Java 11/Tomcat-数据处理程序没有默认构造函数



我在JAXB方面遇到了一些问题,我发现它有很多实现,我使用了JBoss,代码运行良好(Metro JAXB(,现在使用了tomcat和com.sun.xml.bind……它没有,它无法将Base64编码的字符串转换为DataHandler。现在我再次重新编译了它,我正在尝试@XMLAttachmentRef是否能解决我的问题。

[com.sun.xml.bind.v2.ClassFactory]  No default constructor found on class javax.activation.DataHandler
java.lang.NoSuchMethodException: javax.activation.DataHandler.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3349)
at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2553)
at com.sun.xml.bind.v2.ClassFactory.tryGetDeclaredConstructor(ClassFactory.java:107)

我所理解的是,它之所以失败,是因为DataHandler没有null args构造函数。

我在使用OSGI,我问自己是否可以通过删除com.sun.xml.bind来更改JAXB,并添加一些其他jar来注入它?

因此,经过>10h的调试,我找到了原因:

类TypeInfoSetImpl方法getTypeInfo这里让JAXB查找hashmap中的内置类型,它将类类型与hashcode((进行比较,但我的两个javax.activation.DataHandler有两个不同的类加载器,这导致它们不同,所以它返回null,类javax.activation。DataHandler被重新配置为pojo自定义类,可以用null args构造函数实例化。

删除secound jar解决了我的问题。

相关内容

最新更新