java - JAXB/Java 11/Tomcat - DataHandler 无默认构造函数

标签 java xml tomcat jaxb

我在使用 JAXB 时遇到了一些麻烦,我发现它存在许多实现,我使用了 JBoss 并且代码运行良好(Metro JAXB),现在使用 tomcat 和 com.sun.xml.bind.. 它没有t,它无法将 Base64 编码的 String 转换为 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 来注入(inject)它?

最佳答案

经过超过 10 个小时的调试,我找到了原因:

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

删除第二个 jar 解决了我的问题。

关于java - JAXB/Java 11/Tomcat - DataHandler 无默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61612982/

相关文章:

java - 如何在 MyBatis Mapper XML 中连接一个 ResultHandler

android - 缺少 list 文件

eclipse - Tomcat 7.0.28 未启动

java - 蛇碰撞不起作用 - Java 处理

java - Tyk API Gateway 每 60 秒重试一次请求

java - 如何在 Selenium 自动化测试中管理 Gmail 中 COMPOSE 按钮的动态 ID

Android: java.lang.ClassCastException: android.widget.imageView 不能转换为 android.widget.textView

java - Solr 索引时间 32 位与 64 位

java - 如何修复无法在maven springmvc元素的maven构建中加载css文件

java - 如何在 Hibernate Java obj 中添加 @XmlTransient