1

私は監査(後でキャッシング=独自の応答の作成)を使用してWebサービスプロキシに取り組んでおり、@ Endpointsを生成する必要があります(転送する、つまりリモートWebサービスまたは少なくともダミーを呼び出す)。プロキシがリクエストに「何か」を追加するために、マーシャリング/アンマーシャリングが必要と思われます...

spring-wsとJAXBを使用します。プロキシされたWebサービスのすべてのXSDと静的WSDLを取得しました。

周りに何かヒントはありますか?似たようなことをしている人はいますか?お元気ですか?

スプリングまたはスプリング統合を使用してこれを実現する簡単な方法はありますか?

前もって感謝します..

4

2 に答える 2

1

これは、SpringWSとSpringIntegrationの両方を使用して可能になるはずです。

Spring WSを使用すると、リモートWSのプロキシクラスを作成し、org.springframework.ws.client.core.WebServiceTemplateをラップしてWSと通信できます。WSと通信するには、XMLへのリクエストのマーシャリングとアンマーシャリングを処理するAPIがあります。応答。

Spring Integrationを使用すると、アウトバウンドWebサービスゲートウェイを使用できますが、次のように、プロキシとして機能するメッセージングゲートウェイを前面に配置する必要があります。

<int:gateway id="wsproxy"  service-interface="..ProxyInterface" default-request-channel="requestChannel" default-reply-channel="replyChannel"/>

<int-ws:outbound-gateway id="wsGateway" request-channel="requestChannel" uri="http://serviceURL" marshaller="someMarshaller" unmarshaller="someUnmarshaller"/>

ただし、ここでは非常に複雑な統合の必要がないため、WebserviceTemplateを使用する最初のアプローチをお勧めします。

于 2012-06-05T21:39:40.610 に答える
0

今日、私は春の統合なしでどのように進んだかを知ることができます。@Endpointクラスを生成する2つの異なる方法を見つけました。

1)XSLTFreemarkerを使用して、プリコンパイルフェーズでエンドポイントクラスソースを生成しました。XSLT変換は、すべてのWSDLファイルをウォークスルーして1つの要約ファイルを作成し、それを使用してソースを生成しました。

2)Javassistを使用して、テンプレートクラスをコピーし、 JAXB2Marshallerインスタンスのコンテンツに関するメソッドを生成し、最後にFactoryBeanを使用してオブジェクトをインスタンス化しました。これらはすべてサーバーの起動時に行われます。

ここで遭遇した問題は、ルートオブジェクトが@XmlRootAnnotationなしで生成される原因となる形式で記述されたXSDファイルのセットでした。私たちが持っていたJavassistバージョンはJava1.4(ジェネリックなし)で内部的に動作するため、XJCのグローバルカスタマイズファイルを使用し、ルートオブジェクトに@XmlRootAnnotationを強制しました。

どちらのソリューションにも長所と短所がありますが、どちらもESBを使用するよりも簡単です。

于 2013-06-03T01:36:17.307 に答える