我需要使用彈簧集成來實現Web服務客戶端(以及之後的Web服務服務器)。我已經與春季整合團隊提供的樣本一起工作過。該實現使用HTTP作爲傳輸層。客戶端發出HTTP請求,服務器發回HTTP響應。我不想使用HTTP,而是使用JMS作爲傳輸層。在這種情況下,客戶端向隊列發送一個SOAP-Request(服務器正在監聽該隊列),並在發送它時創建一個臨時隊列並將其設置在JMS消息頭中的RepyTo中。服務器獲取來自Queue進程的請求,然後使用ReplyTo隊列發回SOAP-Response。我知道我們可以使用spring-ws和spring-jms庫來完成它。我想使用ws和jms的spring-integration支持:與JMS一起使用彈簧集成Web服務網關
客戶端發送請求:java對象 - > SOAP消息 - > JMS消息(有效載荷是SOAP xml) 服務器接收請求:JMS消息是SOAP xml) - > SOAP消息 - > java對象 服務器回發響應:java對象 - > SOAP消息 - > JMS消息(有效載荷是SOAP xml)
例如,我爲webservice客戶端我現在正在嘗試。你能檢查我失蹤的東西嗎?
<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