JAXB / Java 11 / Tomcat - DataHandler Нет конструктора по умолчанию - PullRequest
0 голосов
/ 05 мая 2020

У меня проблемы с JAXB, я обнаружил, что существует множество его реализаций, я использовал JBoss, и код работал хорошо (Metro JAXB), теперь с tomcat и com.sun. xml .bind .. it нет, он не может преобразовать строку в кодировке 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 не имеет конструктора с нулевым аргументом.

Я использую OSGI. Я спросил себя, могу ли я изменить JAXB, удалив com.sun. xml .bind и добавив несколько других jar-файлов для его внедрения?

1 Ответ

0 голосов
/ 11 мая 2020

Итак, после> 10 часов отладки я нашел причину:

Класс TypeInfoSetImpl Метод getTypeInfo Здесь JAXB выполняет поиск встроенных типов в хэш-карте, он сравнивает типы классов с hashcode (), но у моих двух javax.activation.DataHandler было два разных загрузчика классов, поэтому они разные, поэтому он вернул null, а класс javax.activation.DataHandler был преобразован как настраиваемый класс pojo, который может быть создан с помощью конструктора нулевых аргументов.

Удаление второй банки решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...