Краткий ответ - да. Главное, что нужно понять, это то, что среда Java AppEngine использует Jetty HTTP / контейнер сервлетов. Оттуда вы можете следовать руководству пользователя Metro , чтобы добавить веб-сервис на ваш сайт / приложение. Metro - это реализация JAX-WS. Вот что я сделал, чтобы добавить веб-сервис SOAP к образцу веб-сайта GuessBook, который я запускал в локальной среде разработки - я немного ленив и не хотел начинать с нуля:
Добавьте зависимость Metro в файл POM:
<dependency>
<groupId>org.glassfish.metro</groupId>
<artifactId>webservices-rt</artifactId>
<version>2.3</version>
</dependency>
Создайте стандартный класс веб-службы SOAP, который будет обрабатывать входящие вызовы веб-службы. Например:
package com.jh.guessbook;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@WebService(serviceName = "SOAPHelloWorld")
public class SOAPHelloWorld
{
/**
* This is a sample web service operation
*/
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") String txt)
{
return "Hello " + txt + " !";
}
}
Создайте файл sun-jaxws.xml
в папке WEB-INF
. Здесь вы определяете свои конечные точки. Вот файл для моего примера веб-сервиса:
<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint
name="SOAPHelloWorld"
implementation="com.jh.guessbook.SOAPHelloWorld"
url-pattern="/soapws"/>
</endpoints>
И последнее, но не менее важное: настройте прослушиватель WS, сервлет и отображение URL в web.xml
. Вот что я добавил к своему web.xml
:
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>SOAPHelloWorld</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>SOAPHelloWorld</servlet-name>
<url-pattern>/soapws</url-pattern>
</servlet-mapping>
Вы можете получить определение WSDL, просмотрев конечную точку с помощью ?wsdl
. В моем случае, снова работает локально, URL-адрес http://localhost:8080/soapws?wsdl
.