JAX-WS не перечисляет сервисы под WAS 8.5.5
Я следовал этому руководству, чтобы включить стороннюю JAX-WS на WAS: http://www.ibm.com/support/knowledgecenter/SSAW57_8.0.0/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/twbs_thirdparty.html?cp=SSAW57_8.0.0%2F3-3-0-25-10-1
и это часть моего пом
...
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.1</version>
</dependency>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<DisableIBMJAXWSEngine>true</DisableIBMJAXWSEngine>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>wsgen</goal>
</goals>
</execution>
</executions>
<configuration>
<sei>com.example.myService</sei>
<genWsdl>true</genWsdl>
<keep>true</keep>
<resourceDestDir>${basedir}/src/main/webapp/WEB-INF/wsdl</resourceDestDir>
<sourceDestDir>${basedir}/src/main/java</sourceDestDir>
</configuration>
</plugin>
myService.java:
@WebService(
targetNamespace = "...",
name = "...",
serviceName = "...")
public class MyService {
@WebMethod
public String req1() {
return "";
}
}
WEB-INF / web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>...</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>...</servlet-name>
<url-pattern>/...</url-pattern>
</servlet-mapping>
WEB-INF / ВС-jaxws.xml
<?xml version='1.0' encoding='UTF-8'?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint name='...' implementation='com.example.myService' url-pattern='/...' ></endpoint>
</endpoints>
Аннотация правильно отключена, и wsgen создает артефакты и папку WEB-INF/wsdl.
Я также создал этот WEB_INF/webservices.xml:
<webservices>
<webservice-description>
<webservice-description-name>...</webservice-description-name>
<wsdl-file>WEB-INF/wsdl/....wsdl</wsdl-file>
<port-component>
<port-component-name>...</port-component-name>
<service-endpoint-interface>com.example.myService</service-endpoint-interface>
<service-impl-bean>
<servlet-link>...</servlet-link>
</service-impl-bean>
</port-component>
</webservice-description>
</webservices>
Эта же конфигурация работает под tomcat и weblogic, но под 8.5.5 (с родительской последней политикой) никакие сервисы не предоставляются. Консоль WebSphere показывает "нет ошибки":
[21/03/16 12.08.37:379 CET] 00000096 http I WSSERVLET12: JAX-WS context listener initializing
[21/03/16 12.08.39:371 CET] 00000096 monitoring I Metro monitoring rootname successfully set to: null
[21/03/16 12.08.39:602 CET] 00000096 http I WSSERVLET14: JAX-WS servlet initializing
1 ответ
После отключения ядра WAS JAX-WS WAS не обнаружит и не создаст артефакты веб-службы в развернутом приложении. Тогда службы JAX-WS не будут перечислены в консоли администратора WAS, это ожидаемое поведение. Кроме услуг, не перечисленных, есть ли ошибка? И я обнаружил, что имя файла DD веб-службы неверно, оно должно быть webservices.xml.
С уважением Ян