Java:使用端点将webservice发布到tomcat服务器

时间:2010-01-18 01:54:32

标签: java web-services jax-ws tomcat6 endpoint

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

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

我的问题是:Endpoint.publish是否使用tomcat服务器来托管这个或者它是一种迷你玻璃鱼类服务器?

我应该扩展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";
    }
}

3 个答案:

答案 0 :(得分:25)

  

Endpoint.publish是否使用tomcat服务器来托管它?或者它是一种迷你玻璃鱼类服务器吗?

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

  

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

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

现在,如果您在端口8082上运行Tomcat服务器,并且尝试使用相同的端口发布Endpoint,那么事情将无法正常工作。在开发过程中使用不同的(未使用的)端口。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

相关问题