2011-01-12 65 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派生。