更改 JBoss AS 7.1 中发布的 WebService 地址。1.Final

Change published WebService address in JBoss AS 7.1.1.Final

我们正在将 Web 服务从 JBoss 5 迁移到 JBoss7。Web 服务现在使用 URL 中的服务名称发布,这打破了我们所有现有的客户端.

如何将已发布的地址强制恢复到原来的地址?

JBoss 5 url: http://localhost:8080/app/MyServiceImpl

JBoss 7 url: 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:找不到服务的定义

谢谢

所以,正如我在问题中所说,如果我从@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 Service的注解属性。

所以,如果我没有提供 serviceName 属性,它就不会添加到 URL 中,现在它看起来像 JBoss5 中的那个:

http://localhost:8080/app/MyServiceImpl