2011-01-12 61 views
1

使用CXF生成客户端工件并使用java2ws插件生成我的wsdl。CXF配置问题

在用于在tomcat上生成WSDL的CXF配置中,您需要定义jaxws:endpoint - 我对jaxws:endpoint address属性的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:地址元素指定为在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 = full http path where the wsdl resides ...

例如$HOST_NAME = "http://localhost...."

但是,这似乎没有擦出火花。

即使指向正确的方向,这种更改也会导致目前时刻的格式错误的WSDL。

回答

1

Adi,我在您的描述中看到一个矛盾 - 您说您正在生成客户端工件,但您的配置是针对服务端点的。对于客户端适当的配置是 -

<jaxws:client...> 

<jaxws:endpoint..> 

假设你正在编写一个服务而不是客户端,地址是相对的,当你问从服务的URL一个WSDL除非您想用jaxws:service的wsdlLocation参数指定明确的wsdl(不是生成的),否则该服务从请求url和您指定的地址的相对URI派生。