11

我正在创建一个简单的 SOAP Web 服务。我要确保它在 tomcat 网络服务上运行。

我试图用 JAX-WS 来实现这个(见代码)

我的问题是:Endpoint.publish 是使用 tomcat 服务器来托管它还是迷你 glassfish 类型的服务器?

我应该扩展 UnicastRemoveObject 还是类似的东西?

理想情况下,它可以打包成 .WAR 并放入目录中并正常工作。

它似乎不适用于我安装的 tomcat 服务器,因为它说端口已在使用中。我正在使用安装了 tomcat6 软件包的 Ubuntu karmic,也可能是我的用户没有权限发布到 8080 上正在运行的 tomcat

我希望这个问题足够清楚

示例代码:

@WebService
public class UserAttributes {
    public static void main(String[] args) {
        UserAttributes instance = new UserAttributes();
        Endpoint.publish("http://localhost:8082/WebServices/userattributes", 
            instance);
    }

    public string Hello() {
       return "Hello World";
    }
}
4

3 回答 3

25

是使用 tomcat 服务器来托管它Endpoint.publish还是迷你 glassfish 类型的服务器?

JAX-WS RI Endpoint.publishAPI 默认使用 Sun 的 Java SE 6 中包含的轻量级HTTP 服务器实现。所以不,它不使用嵌入式 GlassFish 或嵌入式 Tomcat,更不用说您现有的 Tomcat 安装:它使用嵌入式容器,即在同一个 JVM 中运行的东西。仅供参考,但是只要它们提供服务提供者实现(SPI),就可以插入其他实现。例如,Jetty 6 就是这样做的,请参阅J2se6HttpServerSPI。但我不会在这里介绍所有细节:)

它似乎不适用于我安装的 tomcat 服务器,因为它说端口已在使用中。

正如我上面所说,Enpoint.publishAPI 不使用您现有的 Tomcat 安装。它使用自己的服务器并允许您部署 Web 服务,而无需打包和部署您的应用程序。它在开发过程中特别有用(因为它加快了速度)。实际上,它非常方便。

现在,如果您有一个 Tomcat 服务器在端口 8082 上运行,并且如果您尝试Endpoint使用相同的端口发布您的服务器,那么事情将不会像您注意到的那样工作。在开发过程中使用不同的(和未使用的)端口。

而且,如果您想将 Web 服务部署到现有的 Tomcat 安装中,那么您必须将它们打包到一个 war 中并在 Tomcat 上部署这个 war。Endpoint.publish但这完全不同,与使用API没有任何关系。

于 2010-01-18T03:15:44.183 回答
1

很有意思。在我看来,嵌入式服务器还包含一个肥皂引擎来处理发送到该端口的肥皂消息。这也是嵌入式肥皂引擎还是使用流行的肥皂引擎之一(axis2,cxf,metro)

于 2010-10-12T19:12:01.553 回答
0

Endpoint.publish()不会将 Web 服务发布到服务器实例。如果要将端点发布到 Web 服务器,则必须使用ws gen工具将其打包到 WAR 中,然后部署到 Web 服务器。

Endpoint.publish()将端点发布到 JVM 的运行时实例,而不创建服务器实例。在使用使用 JAX-WS 创建的客户端测试类对 Web 服务进行单元测试时,它非常有用。

于 2020-06-14T17:58:45.567 回答