更改 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 部署属性中
我使用的是 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 部署属性中