如何使用java和tomcat在本地运行战争作为Web服务?

时间:2012-10-06 18:51:50

标签: java web-services cxf tomcat6

我有一些java客户端代码在远程服务器上的战争中连接到Web服务。我正在使用myeclipse 10.0,java 1.6,cxf 2.2,嵌入式tomcat 6 localhost服务器,我正在命令行运行tomcat 6,两个tomcats都在同一台机器上运行。

当我的wsdl文件指向远程服务器上的服务时,一切正常,但是,当我在我的一台机器上设置所有内容时,当我尝试访问该服务时,我得到了一个java.io异常。

我在不同的端口上设置了tomcat的两个实例,我可以看到使用ProcessExplorer加载所有内容并使用netstat我可以看到端口正在与他们的侦听器一起工作而没有冲突。我使用了这个link中的信息来设置tomcat实例。然后我将war文件复制到webapps目录,我看到tomcat爆炸了这些类并加载了它们。我们还使用cacerts文件进行ssl身份验证,我确认它位于jvm中的正确位置。

以下是错误:引起:java.io.IOException:// at org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2071)     at org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.handleResponse(HTTPConduit.java:2022)     at org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.close(HTTPConduit.java:1947)     at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)     at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)     at org.apache.cxf.interceptor.MessageSenderInterceptor $ MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)     在org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)     在org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:472)     在org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:302)     在org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:254)     在org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)     在org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:123)     在$ Proxy71.get(未知来源)

我正在使用此网址来访问网络服务端点:

http://localhost:7070/<root context>/<serviceName>

为什么这不起作用或者有更好的方法可以做到这一点?

后果:

我正在使用的战争文件来自回购,并在我下载时将日期添加到它的名称。我通过剥离日期改变了战争的名称以匹配上下文根,重新部署它并且一切都开始工作。

2 个答案:

答案 0 :(得分:1)

我正在使用的war文件来自一个repo,当我下载它时,它将日期添加到它的名字中。当我重新审视我所做的事情时,我意识到了这个问题,所以我通过剥离日期来改变战争的名称以匹配上下文根,重新部署它并且一切都开始工作。

答案 1 :(得分:0)

只需复制tomcat war目录中的webapps文件,然后重新启动Tomcat。 war文件将自动转换为app folder