Развертывание Войны Стеклянной рыбы - PullRequest
2 голосов
/ 21 февраля 2010

У меня очень раздражающая проблема.

Итак, я хочу включить 2 jar-файла в мое веб-приложение java (.war-файл) для загрузки на Glassfish версии 2.1.

Файлы:

axis2-adb-1.4.1.jar и wstx-asl-3.2.4.jar.

В моем консольном приложении я просто добавляю их в мой путь к классам, и они работают нормально. Однако, когда я размещаю это на Glassfish (банки помещены в WEB-INF/lib/), я получаю это:

java.lang.reflect.InvocationTargetException

org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Не может вызвать getTypeObject метод в классе отображения расширений

Я заметил, что в моем консольном приложении, когда я удаляю wstx-asl-3.2.4.jar из моего пути к классам, я получаю точно такую ​​же ошибку. Поэтому я чувствую, что эта банка не загружена каким-то образом.

Затем я перешел к переупаковке банок вместе. Я сделал этот большой axis2 + wstx.jar и загрузил его в свой проект Glassfish. Та же самая ошибка ... Это определенно загрузка, так как без jar axis2 он бросил бы класс axis2, не определяемый как исключение ранее.

Итак, моя теория состоит в том, что glassfish загружает банки лениво, и, поскольку ни jar ax2, ни моя основная программа не требуют этот wstx jar, он загружен неправильно. Но я, наверное, совершенно не прав.

Я действительно надеюсь, что кто-то может помочь мне с этим.

Ответы [ 2 ]

4 голосов
/ 22 февраля 2010

Начиная с GF v2 b49, Woodstox интегрируется как часть Glassfish вместе с sjsxp , который остается парсером по умолчанию. Чтобы включить Woodstox, установите следующие системные свойства на стороне сервера:

-Djavax.xml.stream.XMLEventFactory=com.ctc.wstx.stax.WstxEventFactory
-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory
-Djavax.xml.stream.XMLOutputFactory=com.ctc.wstx.stax.WstxOutputFactory

Подробнее в Woodstox в Glassfish v2 .

Если использование встроенного Woodstox не соответствует вашим требованиям, то, возможно, попробуйте активировать «функцию делегирования загрузки классов» в файле sun-web.xml, установив для нее значение delegate="false" в элементе class-loader. Примерно так:

<sun-web-app>
  <class-loader delegate="false"/>
</sun-web-app>
0 голосов
/ 21 февраля 2010

Я думаю, что в обоих банках один класс. И как-то класс без метода getTypeObject загружается первым. Если есть возможность изменить порядок загрузки jar-файлов в classpath, это поможет.

...