CXF を使用して Web サービスを開発しています。私は HTTP バインディングを使用しているため、http: //www.w3.org/TR/wsdl#_soap:operation によると、このタイプのトランスポートにはsoapactionが必須です。
問題は、テスト サーバーと運用サーバーに同じアプリケーションをデプロイしたいということです。アプリケーションを再構築したり、外部 WSDL ファイルを保持したりせずにそれを行いたいと考えています。これにより、メンテナンス リストにもう 1 つ追加されます。
私は場所で同じ問題を抱えていましたが、それは簡単に解決できました。エンドポイント構成で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>
ソープアクションでも同じ機能を実現したいと思います。この属性の値は、相対 URI であってはなりません。したがって、テストの場合は次のようになります。
<soap:operation soapAction="https://test.example.org/dsSOAP/operation1" />
そして生産のために
<soap:operation soapAction="https://example.org/dsSOAP/operation1" />
これを達成する方法はありますか?