我使用CXF生成客户端工件并使用java2ws插件生成我的wsdl。
在用于在tomcat上生成WSDL的CXF配置中,您需要定义jaxws:endpoint - 我遇到了针对jaxws:端点地址属性的CXF配置设置的问题。最终生成的wsdl有语法问题
CXF.xml(不使用我的MAVEN POM中的弹簧罐) - >
<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:地址的绝对URL规范写入生成的WSDL中。目前这设置为“/” - 这对我有用 - 因为地址直接来自wsdl,只是它在soap:address - &gt;末尾附加一个尾部斜杠。当它生成wsdl作为最终产品时
<soap:address = ' ...... /'>
我的目标是以这样一种方式部署,即我没有过多/附加。
我已经尝试完全删除了地址字段但是没有用。我也试过硬编码地址,即使用绝对URI
<jaxws:endpoint
id="JMSMetricsServiceEndpoint"
implementor="com.putnam.jms.monitor.websvcs.JMSMetricsService"
address="${HOST_NAME}">
其中$HOST_NAME = full http path where the wsdl resides
...
示例$HOST_NAME = "http://localhost...."
但这似乎也无效。
即使指向正确的方向,此更改也会在当前时刻导致格式错误的WSDL。
答案 0 :(得分:1)
Adi,我在你的描述中看到了一个矛盾 - 你说你正在生成客户端工件但你的配置是针对服务端点的。对于客户端,适当的配置是 -
<jaxws:client...>
不是
<jaxws:endpoint..>
假设您正在编写服务而非客户端,地址是相对的,当您从服务中请求wsdl时,服务的url是从请求URL和您指定的地址的相对URI派生的,除非您需要使用jaxws:service的wsdlLocation
参数指定显式的wsdl(不是生成的)。