我使用 CXF 生成客户端工件并使用 java2ws 插件生成我的 wsdl。
在用于在 tomcat 上生成 WSDL 的 CXF 配置中,您需要定义 jaxws:endpoint - 我在 jaxws:endpoint 地址属性的 CXF 配置设置方面遇到问题。最终生成的wsdl有语法问题
CXF.xml(在我的 MAVEN POM 中不使用 spring jar)->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="JMSMetricsServiceEndpoint"
implementor="com.putnam.jms.monitor.websvcs.JMSMetricsService"
address="/">
</jaxws:endpoint>
jaxws:address 元素指定在定义正在部署的服务的 WSDL 文件中定义的端点地址。这需要将正确的soap:address 的绝对URL 规范写入生成的WSDL。目前,它设置为“/” - 这对我有用 - 因为地址直接从 wsdl 准备就绪,除了它在soap:address 末尾附加一个尾部斜杠 -> 当它生成 wsdl 作为最终产品时
<soap:address = ' ...... /'>
我的目标是让它以一种没有过多/附加的方式进行部署。
我尝试完全删除地址字段,但没有成功。我还尝试过对地址进行硬编码,即使用绝对 URI
<jaxws:endpoint
id="JMSMetricsServiceEndpoint"
implementor="com.putnam.jms.monitor.websvcs.JMSMetricsService"
address="${HOST_NAME}">
其中 $HOST_NAME = wsdl 所在的完整 http 路径
...
示例 $HOST_NAME = "http://localhost..."
但这似乎也不起作用。
该更改目前会导致 WSDL 格式错误,即使它指向正确的方向。
最佳答案
Adi,我在您的描述中发现了一个矛盾 - 您是说您正在生成客户端工件,但您的配置是针对服务端点的。对于客户端,适当的配置是 -
<jaxws:client...>
不是
<jaxws:endpoint..>
假设您正在编写一个服务而不是客户端,地址是相对的,当您从服务请求 wsdl 时,服务的 url 将从请求 url 和您指定的地址的相对 URI 派生,除非您想使用 jaxws:service 的 wsdlLocation
参数指定显式 wsdl(不是生成的)。
关于java - CXF配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673607/