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

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

我试图用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"; } } 

Endpoint.publish是否使用tomcat服务器来托管它或者它是一种迷你glassfish类型的服务器?

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

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

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

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

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

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