首页 > 解决方案 > 如何在 Google App Engine 中创建和托管 SOAP 网络服务?

问题描述

是否可以使用 Java 在 Google App Engine 中创建和托管 SOAP Web 服务?

我一直在查看官方 GAE 文档和互联网,但找不到有关它的信息或说明。

如果可能,要在 pom.xml 中添加哪些库以及应用程序的配置说明(针对 web.xml 和 appengine-web.xml)?

标签: javamavengoogle-app-enginesoap

解决方案


简短的回答是肯定的。主要要了解的是AppEngine Java 环境使用 Jetty HTTP/servlet 容器。从那里,您可以按照 Metro用户指南将 Web 服务添加到您的站点/应用程序。Metro 是 JAX-WS 实现。这是我在本地开发环境中运行的 GuessBook 示例网站中添加 SOAP Web 服务的操作——我有点懒,不想从头开始:

  1. 将 Metro 依赖项添加到您的 POM 文件中:

    <dependency>
        <groupId>org.glassfish.metro</groupId>
        <artifactId>webservices-rt</artifactId>
        <version>2.3</version>
    </dependency>
    
  2. 创建一个标准的 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 + " !";
        }
    }
    
  3. 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>
    
  4. 最后但同样重要的是,在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.


推荐阅读