Разрешение класса XPath в JBoss5

Мне нелегко выяснять, куда проблема возникает из, таким образом, я отправляю это в надеждах, что другие, возможно, нашли что-то подобным этому в другом месте и достаточно любезны для совместного использования их понимания.

Я использую JBoss 5.0.1. Сервер приложений GA, работающий сверху Java Sun 1.6.0-13 JDK. Для ВОЕННОГО файла в сгенерированном веб-сервисе я использую механизм Axis2 1.4 WS, файлы JAR которого вставляются Eclipse Galileo в проект WEB-INF/lib каталог при создании Веб-сервиса из данного класса "рабочего" в Динамическом веб-проекте. Отрывок соответствующих норм следует:

String sUrl = "http://example.com/datafile.xml";
String sPath = "/some/xpath/string";
InputStream input = new URL(sUrl).openStream();
InputSource source = new InputSource(input);
DocumentBuilderFactory docFact = DocumentBuilderFactory.newInstance();
docFact.setNamespaceAware(false);
DocumentBuilder parser = docFact.newDocumentBuilder();
Document doc = parser.parse(source);
XPath xpath = XPathFactory.newInstance().newXPath();
// error occurs here:
String result = (String) xpath.evaluate(path,doc,XPathConstants.STRING);
input.close();

Это - ошибка, которую я получаю от журнала JBoss:

java.lang. LinkageError: ограничительное нарушение загрузчика: при разрешении поля "STRING" загрузчик класса (экземпляр org/jboss/classloader/spi/base/BaseClassLoader) относящегося класса, javax/xml/xpath/XPathConstants, и загрузчика класса (экземпляр <загрузчика>) для разрешенного типа поля, javax/xml/namespace/QName, имеет различные Объекты класса для того типа

Я мог использовать XPath.evaluate(String,Document) — однако существуют случаи, где я должен добраться (например), a XPathConstants.NODESET вместо этого, таким образом, это - остановка. Я также попытался возиться немного путем замусоривания некоторых jboss-web.xml файлы тут и там в ВОЕННОМ файле, но без эффекта.

То, что я пытаюсь понять:

  • Куда ошибка могла прибывать из? Загрузчик класса JBoss? Некоторое странное взаимодействие между JBoss и JDK Sun? Некоторая странность, представленная Eclipse при создании веб-сервиса? Возможно, некоторый беспорядок, представленный библиотеками Axis2, развернутыми в рамках ВОЙНЫ?
  • Я нашел экземпляры компилируемых файлов класса в том, что похоже на тройное-whammie:
    • Sun JDK (файл rt.jar);
    • Библиотеки JBoss ($JBOSS_HOME/lib/endorsed/stax-api.jar); и
    • Axis2-развернутые библиотеки ($JBOSS_HOME/server/deploy/MyProject.ear/MyProject.war/WEB-INF/lib/axis2-saaj-api-1.4.jar и woden-impl-dom-1.0M8.jar).
  • Как точно я, как предполагается, настраиваю JBoss для сообщения этого, от каких классов нормально загружаться из "других" библиотек? А именно, jaxax.xml.namespace.QName вызывает горе.

Заранее спасибо.

8
задан skaffman 14 July 2010 в 15:28
поделиться

2 ответа

Кажется, проблема была решена путем удаления пакет javax.xml.namespace. * и соответствующие классы из развернутых файлов Axis2 JAR. А именно, используя Axis2 1.4.1 (вместо 1.4), я переупаковал эти файлы JAR:

  • axis2-saaj-api-1.4.1.jar , удалив javax.xml.namespace
  • woden-impl-dom-1.0M8.jar , удалив javax

Кроме того, Eclipse чрезвычайно требователен к конфигурации проекта. Пока что я обнаружил, что фасет проекта для динамического веб-проекта имеет , который должен быть создан с помощью динамического веб-модуля версии 2.4 (а не 2.5, как предполагается по умолчанию) , но с версией Java 6 (такой же, как ветка используемого JDK). Я не знаю, почему это происходит, я полагаю, что динамический веб-модуль версии 2.4, по умолчанию связанный с Java 1.4 в Eclipse, является источником всей путаницы. Некоторые поисковые запросы привели меня к мысли, что пакет javax.xml не был включен в JDK до Java 5 или Java 6 - отсюда и возможная путаница! Однако я недостаточно осведомлен, чтобы исследовать, связана ли проблема с тем, как Eclipse упаковывает архивные файлы для развертывания, так что это всего лишь подозрение, которое у меня есть.

4
ответ дан 5 December 2019 в 15:20
поделиться

JBoss выдаст ошибку LinkageError , когда путь к классам приложения содержит классы, которые JBoss считает «защищенными», т.е. не позволяет приложению содержать собственные копии определенных ключевых API.

В этом случае похоже, что ваше приложение содержит собственные копии javax.xml.xpath API и, возможно, некоторые другие, как вы упомянули.

Вам необходимо удалить из каталогов ваших EAR / WAR lib все, что конфликтует с собственными библиотеками JBoss (например, axis2-saaj-api-1.4.jar ).

7
ответ дан 5 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: