更改 Apache CXF SOAP 服务的默认 /webservices 路径

change default /webservices path for Apache CXF SOAP service

我使用的是 tomEE 1.7.1,里面装有 Apache CXF 2.6.14。

我有一个服务于 WSDL 优先 Web 服务的组件:

        @Stateless
        @WebService(
                endpointInterface   = "com.mycompany.SecurityTokenServiceWS", 
                targetNamespace     = "http://sts.mycompany/wsdl/", 
                serviceName         = "SecurityTokenService", 
                portName            = "TokenService")
        @SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL) 
        public class TokenService implements SecurityTokenServiceWS {

        //service methods
    }

当我部署网络应用程序时,我看到了这个日志:

Jan 30, 2015 12:47:22 PM org.apache.openejb.server.webservices.WsService deployApp
INFORMATION: Webservice(wsdl=http://localhost:8080//webservices/TokenService, qname={http://sts.mycompany.com/wsdl/}SecurityTokenService) --> Ejb(id=TokenService)

结果 Web 服务可用:http://localhost:8080/webservices/TokenService

我喜欢的是服务直接运行在:http://localhost:8080/TokenService.

我不知道 "webservices" 路径元素来自哪里。它不在 WSDL 中,也不在任何配置文件中。我的 Web 应用程序直接在上下文路径 / (ROOT) 下运行。

有绑定到 /webservices 的神奇 CXF servlet 吗?我怎样才能改变这种行为?

要更改发布地址,您需要更改端点配置。现在我猜你没有配置,一切都是默认的。您需要创建文件 service.xml(任何名称)并使用 web.xml CXFServlet 初始化参数提供路径“配置位置”或使用Spring.

这是文件内容http://cxf.apache.org/docs/jax-ws-configuration.html

这是一个如何使用 spring http://cxf.apache.org/docs/writing-a-service-with-spring.html

的例子

这来自默认使用子上下文网络服务的 TomEE。

此示例展示了如何更改它https://git-wip-us.apache.org/repos/asf?p=tomee.git;a=tree;f=examples/change-jaxws-url;h=2f88382bd4f925ec27c7305e74d361c8baf46a92;hb=ebe63371a22709a50e79c42206b5e9a0fd8946cc (the interesting file is https://git-wip-us.apache.org/repos/asf?p=tomee.git;a=blob;f=examples/change-jaxws-url/src/main/resources/META-INF/openejb-jar.xml;h=6c0ba44b14eb2e67a550c65d890d325c8bf409b7;hb=ebe63371a22709a50e79c42206b5e9a0fd8946cc)

注意:如果你只想重命名/webservices,你可以在conf/system.properties tomee.jaxws.subcontext=/myothersubcontext

中设置

PS:如果您使用 openejb-jar.xml 解决方案请注意,openejb-jar.xml 1.1 的等效项就是 属性 openejb.webservice.deployment.address 在您的 ejb 部署属性中