在JBoss AS 7.1.1.Final

时间:2016-04-15 15:31:29

标签: jax-ws jboss7.x

我们正在将我们的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:找不到服务的定义

由于

1 个答案:

答案 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中的那个:

http://localhost:8080/app/MyServiceImpl