Как развернуть веб-сервис Apache CXF на Glassfish
У меня есть клиент веб-службы, созданный и построенный с использованием Apache CXF. Затем у меня есть приложение JAX-RS Jersey, в котором я хочу вызывать методы из этого веб-сервиса. Когда я пытаюсь развернуть этот простой проект на сервере Glassfish 4.0, я получаю следующее исключение:
Exception while deploying the app [pelijee] :
The lifecycle method [finalizeConfig] must not throw a checked exception.
Related annotation information: annotation [@javax.annotation.PostConstruct()] on annotated element [public void org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.finalizeConfig() throws java.security.GeneralSecurityException,java.io.IOException] of type [METHOD]. Please see server.log for more details.
Команда развернуть не удалось.
Единственная зависимость CXF, которую я имею в этом проекте:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-jaxrs</artifactId>
<version>2.7.6</version>
<type>jar</type>
<scope>runtime</scope>
</dependency>
Есть ли другая библиотека CXF, совместимая с JSR 250? Спасибо
1 ответ
Одна из проблем Glassfish заключается в том, что полный профиль сервера поставляется в комплекте с Metro для веб-сервисов JAX-WS и Jersey для сервисов отдыха JAX-RS. Настроить загрузчик классов рекомендуется с помощью файла sun-web.xml, включенного в папку WEB-INF вашей WAR. Он должен включать следующее содержание:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC
'-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN'
'http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd'>
<sun-web-app>
<class-loader delegate="false"/>
</sun-web-app>
В прошлом я обнаружил, что иногда у меня все еще есть проблемы с развертыванием; поэтому я фактически полностью удалил функции Metro и Jersey из профиля сервера Glassfish. Вот еще немного информации о развертывании.
http://cxf.apache.org/docs/application-server-specific-configuration-guide.html
Еще одна вещь, которую я заметил, это то, что вы разместили в журнале сообщение, которое включало транспорт Jetty. Это означает, что вы используете HTTP-сервер Jetty и HTTP-сервер Glassfish. Я бы предложил просто использовать Glassfish в качестве веб-сервера и использовать вместо этого транспортный сервлет CXF.