春-WS:事前に生成されたSOAPエンベロープでWebserviceTemplateを使用する方法
-
21-08-2019 - |
質問
あなたは、Webサービスを呼び出すためのSpring-WS WebserviceTemplateを使用して、それがSOAPエンベロープを生成することを避けることはできますか?これは、メッセージがすでにSOAPエンベロープが含まれていますし、私はWebserviceTemplateがその周りに別のものをラップすることを望んでいない、です。 : - )
私はこれをしたい理由は、私は、WS-セキュリティを使用してWebserviceTemplateへのWS-Securityのものを入れたくないWebサービスを呼び出すしたいということですが、ちょうどそれを事前に生成されたとのメッセージを送りたいですSOAPエンベロープ内のWS-Security情報。私はこの方法<のhref = "http://static.springsource.org/spring-ws/sites/1.5/apidocs/org/springframework/ws/client/core/WebServiceTemplate.html#sendSourceAndReceiveToResult(java.langを呼び出してみました。文字列を、ソースを持つ%20javax.xml.transform.Source、%20javax.xml.transform.Result)」のrel = "nofollowをnoreferrer"> sendSourceAndReceiveToResult のは、既にWS-Securityのものでソープ-封筒が含まれており、 Webサービステンプレートは、別のソープエンベロープを包み込むので、メッセージを破棄します。
解決
あなたは奇妙な方法でのWS-Securityを使用している...私はあなたが事前に生成されたメッセージを使用してのWS-Securityの依存を避けるためにしようとしていることを推測します書籍ます。
あなたは、このBeanにWebServiceTemplate上のMessageFactoryを設定することにより、SOAPせずに、プレーンXMLを使用するようにWebServiceTemplateを設定することができます:
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="messageFactory" ref="poxMessageFactory" />
</bean>
<bean id="poxMessageFactory" class="org.springframework.ws.pox.dom.DomPoxMessageFactory" />
他のヒント
インターセプタは、あなたがやろうとしているものの一種のために便利になることができます。ここでのインターセプタの階層を見てみましょう:<のhref =「http://static.springframework.org/spring-ws/docs/1.0-m1/api/org/springframework/ws/EndpointInterceptor.html」のrel = "nofollowをnoreferrer "> http://static.springframework.org/spring-ws/docs/1.0-m1/api/org/springframework/ws/EndpointInterceptor.htmlする あなたは春-WSでEndpointInterceptorを登録し、お好みに合わせて応答を操作することができます。