Я обновляю веб-службы, которые использовали java EJB и были установлены в WebLogic 8.1, до веб-служб JAX-RPC в WebLogic 12c (версия WebLogic Server: 12.2.1.3.0)
Это несколько WS в одном проекте с одним и тем же корневым контекстом. Таким образом, адрес для каждого выглядит так:
[server]:[port]/services/ws1
[server]:[port]/services/ws2
[server]:[port]/services/ws3
...
В моей разработке я не могу установить один и тот же корневой/путь контекста «сервисы» для всех веб-служб.
Возможно ли иметь один и тот же корень контекста для всех из них? (Как в примере выше?)
Подробное описание: У меня есть «Проект веб-служб Weblogic» (Eclipse-> новый проект -> Oracle-> WebLogic-> Веб-службы-> Проект веб-службы) с несколькими веб-службами.
Веб-сервисы были созданы из каждого WSDL с помощью ANT wsdlc. Итак, я получил «ws.jar» (скомпилированный WSDL) и wsImpl.java (куда я поместил свой бизнес-код).
Итак, окончательный список «исходных файлов» выглядит так:
ws1.jar
wsImpl1.java
ws2.jar
wsImpl2.java
ws3.jar
wsImpl3.java
...
Затем я пытаюсь запустить ANT jwsc с несколькими jws, по одному для каждой WS, предоставляя им все contextpath="services". Когда он доходит до второго jws, я получаю ошибку «Службы контекстного пути для веб-приложения my/package/ws2.war уже используются этим приложением».
<target name = "build-service">
<jwsc srcdir = "${src.dir}" destdir = "${final.dir}/wars" verbose = "true" keepGenerated = "false" debug = "on" includeantruntime = "false">
<classpath refid = "project.class.path.build.services" />
<jws file = "my/package/ws1Impl.java" compiledWsdl = "${output.dir}/compiledWsdl/ws1.jar">
<WLHttpTransport contextpath = "services" serviceuri = "ws1" portname = "ws1Port" />
</jws>
<jws file = "my/package/ws2Impl.java" compiledWsdl = "${output.dir}/compiledWsdl/ws2.jar">
<WLHttpTransport contextpath = "services" serviceuri = "ws2" portname = "ws2Port" />
</jws>
</jwsc>
</target>
Спасибо за комментарий @EmmanuelCollin. Я думаю, что объединение всех сервисов в один военный файл может быть решением, которое я ищу, но я не могу понять, как это сделать, поскольку при запуске ANT jws (как в моем посте) он генерирует один военный файл для каждой WS. Есть ли команда/тег ANT для объединения jws в один и тот же военный файл?




Следуя комментарию @EmmanuelCollin, я смог улучшить поиск и нашел решение, используя
<module contextPath = "services" name = "myJar" >
<jws .../>
<jws .../>
</module>
как в: Справочный центр Oracle "Пример 4. Упаковка нескольких веб-служб в один WAR-файл"
Затем я упаковал сгенерированные файлы aplication.xml и .war в .ear с помощью ANT:
<ear destfile = "${dist.dir}/${ant.project.name}.ear" appxml = "${conf.dir}/application.xml">
<metainf dir = "${build.dir}/META-INF"/>
<fileset dir = "${dist.dir}" includes = "*.jar,*.war"/>
</ear>
Наконец, развернули .ear на сервере weblogic 12c и успешно протестировали ответ веб-служб. Все под одним и тем же contextPath.
Спасибо!
Корень контекста должен быть уникальным для каждого хоста. Вы можете объединить все сервисы в один военный файл или использовать http-сервер перед вашими сервисами для отправки запросов трем веб-приложениям.