gpt4 book ai didi

java - 使用 CXF 发布 NonSpring web 服务

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:29 24 4
gpt4 key购买 nike

我们正在将应用程序套件中的网络服务引擎从 AXIS1.1 升级到 CXF3.0.2。在我们的应用程序中发布 Web 服务时,我遇到了一些挑战。

据我了解,有一种 SPRING 方法可以在 CXF 中发布服务,也有一种非 Spring 方法。我更喜欢使用非 spring 方法,因为我们的应用程序是建立在 STRUTS 框架上的,我不想在升级过程中引入 SPRING。如果我没有其他选择,我愿意选择 SPRING 方法来发布 CXF web 服务。

这是我发布 web 服务的非 spring 方法:

我有一个扩展 org.apache.cxf.transport.servlet.CXFNonSpringServlet 并覆盖 loadBus(ServletConfig) 方法的 servlet(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");
}

上述代码片段中的 Endpoint 类是 javax.xml.ws.Endpoint。我的期望是我应该看到具有 URL http://www.myhost.com/contextRoot/services/ 的已发布服务.但我看到的 URL 是“未找到服务”——明确表示发布失败。服务器控制台上的异常堆栈跟踪如下:

java.lang.IllegalArgumentException: Cannot create URL for this address /myService at com.sun.xml.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:237) at 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) at 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.WebGroup.handleRequest(WebGroup.java:304) at 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) at com.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) at 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)

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

最佳答案

我也遇到了同样的情况。你能改变你的 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();
}

关于java - 使用 CXF 发布 NonSpring web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com