是否可以使用Java在Google App Engine中创建并托管SOAP Web服务?
我一直在查看GAE的官方文档和互联网,但找不到相关信息或说明。
如果可能,要在pom.xml中添加哪些库以及该应用程序的配置说明(对于web.xml和appengine-web.xml)?
答案 0 :(得分:1)
简短的回答是。要了解的主要内容是AppEngine Java environment使用Jetty HTTP / servlet容器。从那里,您可以按照Metro user guide将Web服务添加到您的站点/应用程序。 Metro是JAX-WS的实现。这是我在本地开发环境中运行的GuessBook示例网站中添加SOAP Web服务的工作-我有点懒,我不想从头开始:
将Metro依赖项添加到您的POM文件中:
<dependency>
<groupId>org.glassfish.metro</groupId>
<artifactId>webservices-rt</artifactId>
<version>2.3</version>
</dependency>
创建一个标准的SOAP Web服务类,该类将处理传入的Web服务调用。例如:
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
文件。在这里定义端点。这是我的示例Web服务的文件:
<?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>
最后但并非最不重要的一点是,在web.xml
中设置WS侦听器,servlet和URL映射。这是我添加到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
。