5

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" />

これを達成する方法はありますか?

4

1 に答える 1

1

絶対 URL を指定する必要はありません。URL を指定する必要もありません。「操作1」で十分です。http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528で公式の例を参照してください。

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

于 2013-10-08T14:36:11.443 に答える