2016-04-15 76 views
0

我們正在將我們的Web服務從JBoss 5遷移到JBoss 7.現在,Web服務在URL中使用服務名稱發佈,該服務名稱打破了我們所有的現有客戶端。在JBoss AS 7.1.1中更改已發佈的WebService地址。最終

如何強制發佈的地址恢復到原來的狀態?

的JBoss 5網址:http://localhost:8080/app/MyServiceImpl

的JBoss 7網址:http://localhost:8080/app/MyService/MyServiceImpl

服務定義爲所有EJB註解:

@Stateless 
@WebContext(contextRoot = "/app") 
@WebService(name = "MyServiceImpl", serviceName = "MyService", portName = "MyServicePort", targetNamespace = "http://...", portName="MyServicePortType", wsdlLocation="/META-INF/wsdl/MyService.wsdl") 

public class MyServiceImpl extends implements MyServicePortType { 
    //code for webservice operations 
} 

基本上,我想從URL中刪除服務名有落後兼容性。如果我從@WebService中刪除serviceName,那麼在JBoss啓動時會出現錯誤,所以它不是解決方案。該錯誤是這樣的:org.apache.cxf.service.factory.ServiceConstructionException:由所造成服務找不到定義

感謝

回答

1

所以,我剛纔說的問題,如果我從刪除服務名@WebService,JBoss7在啓動時拋出異常。仔細查看堆棧跟蹤,我發現它無法找到@WebClient,因爲它搜索默認構造的名稱,如下所示:MyServiceImplService。

我的解決方案是將名爲MyService的@WebClient重命名爲MyServiceImplService。通過這種方式,我可以從@WebService註釋中刪除屬性serviceName,並向JBoss7提供一個@WebClient,並使用搜索的默認名稱。對於基於EJB的JAX-WS Web服務的默認端點地址是:

主機/ @ WebService.serviceName/@ WebService.name

何地,@ WebService.serviceName和@ WebService.name是註釋屬性Web服務。

所以,如果我沒有提供serviceName特性,它不添加到URL,而現在它看起來像一個在JBoss5:

http://localhost:8080/app/MyServiceImpl