2014-12-03 73 views
3

我們正在將我們的應用套件中的webservice引擎從AXIS1.1升級到CXF3.0.2。我在我們的應用程序中發佈Web服務時遇到了一些挑戰。用CXF發佈NonSpring webservice

據我所知,在CXF中有發佈服務的SPRING方法,並且有一種非彈性方法。我的選擇是採用非Spring方法,因爲我們的應用程序是基於STRUTS框架構建的,而且我不想在此升級工作中引入SPRING。如果我沒有其他選擇,我願意選擇SPRING方法發佈CXF Web服務。

這裏是我的非彈性的方法來發布web服務:

我有延伸org.apache.cxf.transport.servlet.CXFNonSpringServlet並覆蓋loadBus(的ServletConfig)方法(的代碼片段一個servlet下面是loadBus方法)。這個servlet在web.xml配置以接收與URL模式發出的所有請求/服務/ *

@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。我的期望是,我應該看到發佈的服務的URL爲http://www.myhost.com/contextRoot/services/。但我所有我的網址看到的是「沒有發現任何服務」 - 明明寫着發佈失敗..服務器控制檯上的異常堆棧跟蹤如下:

java.lang.IllegalArgumentException異常:無法創建網址這個地址爲 /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.servle (com.ibm.ws.webcontainer.servlet.ServletWrapper.load(ServletWrapper.java:1283) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(ServletWrapperImpl.java:168) 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) 在com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 在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) 在com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 在com.ibm。 io.async.ResultHandler $ 2.run(ResultHandler.java:905) 在com.ibm.ws.util.ThreadPool $ Worker.run(ThreadPool.java:1650)

我缺少或放哪兒我錯了?

回答

0

我也面臨同樣的情況。你能改變你的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(); 
} 
+0

使用代碼時出現此錯誤**沒有找到SoapBindingConfiguration的類** – SRF 2015-11-24 06:59:35

0

我知道這個答案可能會晚一點,但我最近面臨類似的問題(cxf 3.1.4)。在我的情況下,cxf-rt-frontend-jaxws jar沒有在我的應用程序的類路徑中。添加它解決了我的問題。