我在使用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没有空的args构造函数。
我正在使用OSGI,我问自己,我是否可以通过删除com.sun.xml.bind并添加一些其他jars来注入它来更改JAXB?
发布于 2020-05-11 16:06:02
所以经过> 10h的调试,我找到了原因:
类TypeInfoSetImpl方法getTypeInfo在这里使JAXB在哈希图中查找内置类型,它用hashcode()比较类类型,但我的两个javax.activation.DataHandler有两个不同的类加载器,这导致它们不同,所以它返回null,并且类javax.activation.DataHandler被重新识别为pojo自定义类,可以用null参数构造函数实例化。
删除secound jar解决了我的问题。
https://stackoverflow.com/questions/61612982
复制相似问题