我们正在将应用程序套件中的webservice引擎从AXIS1.1升级到CXF3.0.2。在我们的应用程序中发布web服务时,我遇到了一些挑战。
据我所知,CXF中有一种发布服务的SPRING方法,还有一种非spring方法。我倾向于采用非SPRING方法,因为我们的应用程序是构建在STRUTS框架上的,而且我不希望引入SPRING作为这个升级工作的一部分。如果没有其他选择,我愿意选择SPRING方法来发布CXF open服务。
下面是我发布webservice的非春季方法:
我有一个servlet扩展了org.apache.cxf.transport.servlet.CXFNonSpringServlet并重写了loadBus(ServletConfig)方法( loadBus方法的代码片段在下面)。这个servlet在web.xml中被配置为接收所有来自于URL模式/services/*的请求。
@Override
public void loadBus(ServletConfig servletConfig)
{
super.loadBus(servletConfig);
Bus bus = getBus();
BusFactory.setDefaultBus(bus);
Endpoint ep = Endpoint.create(new myWebService());
ep.publish("/myService");
}上面代码段中的端点类是javax.xml.ws.Endpoint。我的期望是,我应该看到带有http://www.myhost.com/contextRoot/services/的发布服务。但是我在URL中看到的是“没有找到任何服务”--很明显,发布失败了。服务器控制台上的异常堆栈跟踪如下:
com.sun.xml.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:237):无法在com.chase.ccs.servlet.CCSCXFNonSpringServlet.loadBus(CCSCXFNonSpringServlet.java:37) at org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:76) at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:329)上为该地址创建URL /myService在com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.init(ServletWrapperImpl.java:168) at com.ibm.ws.webcontainer.servlet.ServletWrapper.load(ServletWrapper.java:1283) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:973) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3703) at com.ibm.ws.webcontainer.webapp。com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:953) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1655) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452) atcom.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276) at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) at com。ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)在com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1650)
我错过了什么或者我哪里出错了?
发布于 2015-02-27 14:23:31
我也面临着同样的情况。您能按以下方式更改loadBus方法吗?对我起作用了。
@Override
public void loadBus(ServletConfig servletConfig){
super.loadBus(servletConfig);
ServerFactoryBean factory = new ServerFactoryBean();
factory.setBus(bus);
factory.setServiceClass(myWebService.class);
factory.setAddress("/myService");
factory.create();
}发布于 2017-07-28 09:52:22
我知道这个答案可能来得有点晚,但我最近遇到了一个类似的问题(cxf 3.1.4)。在我的案例中,cxf-rt-frontend-jaxws jar不在我的应用程序的类路径中。加上它解决了我的问题。
https://stackoverflow.com/questions/27279121
复制相似问题