2016-04-15 56 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