2012-09-25 13 views
5

私はCXFを使用してWebサービスを開発しています。私はHTTPバインディングを使用するので、http://www.w3.org/TR/wsdl#_soap:operationsoapactionは、このタイプの転送には必須です。CXFを使用したWSDLのsoapaction

問題は、テストサーバーと本番サーバー用に同じアプリケーションを展開することです。私は、アプリケーションを再構築したり、メンテナンスリストにもう1つ追加する外部WSDLファイルを保持したりせずにやりたいと思います。

私はの位置と同じ問題を抱えていましたが、解決するのは簡単でした。私は適切な値を設定するために、publishedEndpointUrlをエンドポイント構成で使用しました。この値は、クラスパスtomcat/common/classesに配置された外部プロパティファイルからアプリケーションの初期化中に取得されます。

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
     <value>classpath:ws.properties</value> 
     </list> 
    </property> 
    </bean> 
    <jaxws:endpoint xmlns:tns="http://example.org/ds" id="ds" implementor="org.example.Ds" wsdlLocation="wsdl/ds.wsdl" endpointName="tns:dsSOAP" serviceName="tns:Ds" address="/dsSOAP" publishedEndpointUrl="${publishedEndpointUrl}"> 
    <jaxws:features> 
     <bean class="org.apache.cxf.feature.LoggingFeature" /> 
    </jaxws:features> 
    </jaxws:endpoint> 
</beans> 

soapactionと同じ機能を実現したいと思います。この属性の値は、相対URIでなければなりません。だから、テストのために、それは次のようになります。

<soap:operation soapAction="https://test.example.org/dsSOAP/operation1" /> 

と生産

<soap:operation soapAction="https://example.org/dsSOAP/operation1" /> 

これを達成するためにどのように任意のアイデア?

+0

誰でもお手伝いしますか? –

+0

テストとプロダクションサービスにはどのように異なるsoapActionsが必要ですか?両方のサービスが同じWSDLを使用する場合は、soapActionを一度定義し、testおよびprodに対して同じsoapアクションを使用できます。 –

+0

@YogeshChawla文書化のために間違っていない場合、属性 'soapAcion'は絶対URLを使用する必要があります。したがって、私は相対的に1つの 'dsSOAP/operation1'を置くことはできません。テストとプロダクションの両方に同じ値を設定すると、クライアントはテストサーバーではなくプロダクションサーバーを起動することになります。 –

答えて

1

絶対URLを指定する必要はありません。URLを指定する必要はありません。 "operation1"で十分でしょう。いくつかの公式の例を参照してください。http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528

インスタンスが実行されている環境とsoapアクションをリンクすることは「ベストプラクティス」ではありません。

関連する問題