我们正在将我们的Web服务从JBoss 5迁移到JBoss 7.现在,Web服务在URL中发布了服务名称,这打破了我们现有的所有客户端。
如何强制将发布的地址恢复到以前的状态?
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中删除serviceName以具有向后兼容性。如果我从@WebService中删除serviceName,我在JBoss启动时出错,所以它不是一个解决方案。错误如下:引起:org.apache.cxf.service.factory.ServiceConstructionException:找不到服务的定义
由于
答案 0 :(得分:1)
所以,正如我在问题中所说,如果我从@WebService中删除serviceName,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中的那个: