Разрешение конфликтов библиотек axis2 и OC4J
-
22-07-2019 - |
Вопрос
Я пытаюсь развернуть веб-службу Axis2 на сервере приложений OC4J 10.1.3.
Раньше я использовал axis 1.4 и только что создал свою собственную общую библиотеку со всеми файлами.Была проблема с 1.4, которая была исправлена с помощью 1.5, так что теперь я использую это, но оно включает не все библиотеки.На этот раз я развернул axis2.war на сервере OC4J и использую страницу администратора axis2, чтобы попытаться развернуть свой веб-сервис.
Если я разверну веб-сервис через axis2, то я получу java.lang.NoSuchMethodError: javax.jws.WebMethod.exclude()Z
но я не могу найти конфликтующую библиотеку.В Axis2 есть новые библиотеки jax-ws, но я думаю, что это проблема на сервере приложений OC4J.Я исключил xml.jar (поскольку у него старые библиотеки JAXB 1.0), и это решает проблему на моем локальном компьютере, но не на Linux box.
Я попытался отредактировать план развертывания, чтобы сначала выполнить поиск в локальных папках, и это позволяет мне развернуть службу, но когда я пытаюсь получить к ней доступ или к WSDL, я получаю сообщение об ошибке, связанной с исключением приведения класса и JXDocumentBuilderFactory (на данный момент у меня нет точной ошибки).
Я сравнил общие библиотеки в Linux box с библиотеками на моем локальном компьютере и использовал одни и те же библиотеки в каждой из них (однако я не проверял версии каждой jar).Если axis2 развернут в OC4J, и я разверну свой сервис в axis2, то разве я не унаследую библиотеки axis2 (jax-ws и т.д.)?
Решение
Попробуйте удалить конфликтующую унаследованную библиотеку, добавив это в свой orion-application.xml:
<orion-application>
<imported-shared-libraries>
<remove-inherited name="PUT_HERE_THE_NAME_OF_THE_LIBRARY"/>
</imported-shared-libraries>
</orion-application>
Подробнее здесь: Удаление и / или замена общей библиотеки Oracle, импортированной по умолчанию
Редактировать:
Я просмотрел разделяемые библиотеки и обнаружил, что их там нет, jws-api.jar загружается во время загрузки и не может быть легко удален:
Замените библиотеки OC4J JAX-WS
OC4J имеет предварительную поддержку JAX-WS, к сожалению, это означает, что во время загрузки OC4J загружаются устаревшие API JAX-WS и реализация Oracle.Это происходит еще до того, как общие библиотеки вступают в действие, на очень ранней стадии загрузки OC4J.
Библиотеки OC4J для загрузки настраиваются в boot.xml файле в $ORACLE_HOME/j2ee/home/oc4j.jar bootstrap jar.Чтобы избавиться от этого:
1-Скопируйте файл jar в ${oracle.home}/webservices/lib/jaxws
2-распакуйте файл OC4J.jar
3-Найти META-INF/boot.xml
4-Замените path в этой строке на ваш jar:
<code-source
path="${oracle.home}/webservices/lib/jws-api.jar"
if="java.specification.version == /1\.[5-6]/"
/>
5-Переупаковка oc4j.jar (не забудьте о MANIFEST.MF - используйте jar -m META-INF/MANIFEST.MF)
Оригинальная статья: Конфигурация OC4J для веб-служб