首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CXF发布NonSpring CXF服务

使用CXF发布NonSpring CXF服务
EN

Stack Overflow用户
提问于 2014-12-03 18:34:50
回答 2查看 1.7K关注 0票数 2

我们正在将应用程序套件中的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/*的请求。

代码语言:javascript
复制
@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)

我错过了什么或者我哪里出错了?

EN

回答 2

Stack Overflow用户

发布于 2015-02-27 14:23:31

我也面临着同样的情况。您能按以下方式更改loadBus方法吗?对我起作用了。

代码语言:javascript
复制
@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();
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-28 09:52:22

我知道这个答案可能来得有点晚,但我最近遇到了一个类似的问题(cxf 3.1.4)。在我的案例中,cxf-rt-frontend-jaxws jar不在我的应用程序的类路径中。加上它解决了我的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27279121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档