spring-integration を使用して、Web サービス クライアント (およびその後は Web サービス サーバー) を実装する必要があります。スプリング統合チームから提供されたサンプルは既に使用しています。その実装では、HTTP をトランスポート層として使用します。クライアントは HTTP リクエストを作成し、サーバーは HTTP レスポンスを返信しています。HTTP を使用する代わりに、JMS をトランスポート層として使用したいと考えています。この場合、クライアントは SOAP-Request をキューに送信し (サーバーはこのキューをリッスンします)、送信中に一時的なキューも作成し、JMS メッセージ ヘッダーの RepyTo に設定します。サーバーはキューからリクエストを受信して処理し、ReplyTo キューを使用して SOAP レスポンスを返します。spring-ws および spring-jms ライブラリを使用してそれを実行できることはわかっています。ws と jms のスプリング統合サポートを使用して実行したいと思います。
クライアント送信要求: java オブジェクト -> Soap Message -> JMS メッセージ (ペイロードは SOAP xml) サーバー受信要求: JMS メッセージ (ペイロードは SOAP xml) -> Soap Message -> Java オブジェクト サーバーが応答を返す: Java オブジェクト - > SOAP メッセージ -> JMS メッセージ (ペイロードは SOAP xml)
たとえば、現在試している webservice クライアントの xml 構成を指定しています。不足しているものを確認していただけますか?
<bean id="jndiEnvironment" class="java.util.Properties">
<constructor-arg>
<map>
<entry key="java.naming.factory.initial" value="value" />
<entry key="java.naming.provider.url" value="value" />
<entry key="java.naming.security.principal" value="value" />
<entry key="java.naming.security.credentials" value="value" />
</map>
</constructor-arg>
</bean>
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="/my/jndi/name" />
<property name="jndiEnvironment" ref="jndiEnvironment" />
</bean>
<bean id="marshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
<property name="targetClass" value="zahid.play.si.ws.jms.GetCountryDescriptionRequest" />
</bean>
<bean id="destinationResolver"
class="org.springframework.jms.support.destination.JndiDestinationResolver">
<property name="jndiEnvironment" ref="jndiEnvironment" />
</bean>
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory" />
<bean id="messageSender" class="org.springframework.ws.transport.jms.JmsMessageSender">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationResolver" ref="destinationResolver" />
</bean>
<bean id="messageTemplate" class="org.springframework.integration.core.MessagingTemplate">
<property name="defaultChannel" ref="requestChannel" />
</bean>
<int:channel id="requestChannel" />
<ws:outbound-gateway id="wsClientGateway"
uri="jms:MY.TOPIC?messageType=TEXT_MESSAGE&deliveryMode=NON_PERSISTENT"
message-factory="messageFactory" marshaller="marshaller" unmarshaller="marshaller"
message-sender="messageSender"
request-channel="requestChannel" />
私が使用しているJavaコードではmessagingTemplate.convertSendAndReceive(MessageBuilder.withPayload(request).build())
、リクエストを送信します。
しかし、私はこのエラーが発生しています:
[jms:MY.TOPIC?messageType=TEXT_MESSAGE&deliveryMode =NON_PERSISTENT] is not a valid HTTP URL