If your provider endpoint participates in in/out message exchanges, it will wait for a response from receiving endpoint. You can configure the JMS destination on which the endpoint listens for the response. You can also configure the amount of time the endpoint will wait for a response before it times out.
An endpoint chooses the destination to use for receiving responses with the following algorithm:
If you provided a custom
DestinationChooser
implementation, the endpoint will use that to choose it's endpoint.For more information about providing custom
DestinationChooser
implementations see Using a Custom Destination Chooser.If you did not provide a custom
DestinationChooser
implementation, the endpoint will use its defaultDestinationChooser
implementation to choose an endpoint.The default destination chooser checks the message exchange received from the NMR for a DESTINATION_KEY property. If the message exchange has that property set, it returns that destination.
If the destination chooser does not return a destination, the endpoint will check to see if you configured the destination explicitly.
You configure a response destination using a Spring bean. The recommend way to configure the destination is to configure the bean separately and refer the bean using the endpoint's
replyDestination
attribute as shown in Example 4.1. You can also add the bean directly to the endpoint by wrapping it in ajms:replyDestination
child element.If the destination chooser does not return a destination and you did not explicitly configure a destination, the endpoint will use the value of the
replyDestinationName
attribute to choose its destination.The
replyDestinationName
attribute takes a string that is used as the name of the destination to use. The binding component's default behavior when you provide a destination name is to resolve the destination using the standard JMSSession.createTopic()
andSession.createTopic()
methods to resolve the JMS destination.Note You can override the binding component's default behavior by providing a custom
DestinationResolver
implementation. See Using a Custom Destination Resolver.
By default, a provider endpoint will wait an unlimited amount of time for a response. Since the provider blocks while it is waiting for a response, your application may hang indefinitely if a response does not arrive.
You can configure the endpoint to timeout using the recieveTimeout
attribute. The recieveTimeout
attribute specifies the number of milliseconds the provider endpoint will wait for a response before timing out.
Example 4.4 shows a JMS provider endpoint that will wait for a response for one minute.
Example 4.4. JMS Provider Endpoint with a Response Destination
<beans xmlns:jms="http://servicemix.apache.org/jms/1.0" ... > ... <jms:soap-provider wsdl="classpath:widgets.wsdl" destinationName="widgetQueue" connectionFactory="#connectionFactory" recieveTimeout="60000" replyDestinationName="widgetResponse" /> ... </beans>