Complete: -------- - src/* documentation resources moved to 'docs' subproject - docbook sources upgraded to Docbook 5 - formatted all docbook sources to strip tab characters and eliminate trailing whitespace - all projects compile and test successfully - all artifacts upload successfully to s3, static.sf.org, etc. Remaining: --------- - documentation L&F needs work. CSS, images, and highlighting aren't hooked up properly - spring-integration-jdbc codegen bits in Maven POM need to be transcribed into gradle - dependencies that were optional or provided scope in maven are currently 'compile' scope in Gradle. Need to figure out support in Gradle to fix this. - run through Eclipse classpath and project generation scenarios - delete all Maven artifacts
135 lines
8.2 KiB
XML
135 lines
8.2 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="ws"
|
|
xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Web Services Support</title>
|
|
|
|
<section id="webservices-outbound">
|
|
<title>Outbound Web Service Gateways</title>
|
|
<para>
|
|
To invoke a Web Service upon sending a message to a channel, there are two options - both of which build
|
|
upon the <ulink url="http://static.springframework.org/spring-ws/sites/1.5/">Spring Web Services</ulink>
|
|
project: <classname>SimpleWebServiceOutboundGateway</classname> and
|
|
<classname>MarshallingWebServiceOutboundGateway</classname>. The former will accept either a
|
|
<classname>String</classname> or <interfacename>javax.xml.transform.Source</interfacename> as the message
|
|
payload. The latter provides support for any implementation of the <interfacename>Marshaller</interfacename>
|
|
and <interfacename>Unmarshaller</interfacename> interfaces. Both require a Spring Web Services
|
|
<interfacename>DestinationProvider</interfacename> for determining the URI of the Web Service to be
|
|
called.<programlisting language="java"> simpleGateway = new SimpleWebServiceOutboundGateway(destinationProvider);
|
|
|
|
marshallingGateway = new MarshallingWebServiceOutboundGateway(destinationProvider, marshaller);
|
|
</programlisting>
|
|
<note>
|
|
When using the namespace support described below, you will only need to set a URI. Internally, the parser
|
|
will configure a fixed URI DestinationProvider implementation. If you do need dynamic resolution of the
|
|
URI at runtime, however, then the DestinationProvider can provide such behavior as looking up the URI from
|
|
a registry. See the Spring Web Services
|
|
<ulink url="http://static.springsource.org/spring-ws/sites/1.5/apidocs/index.html">javadoc</ulink> for
|
|
more information about the DestinationProvider strategy.
|
|
</note>
|
|
</para>
|
|
<para>
|
|
For more detail on the inner workings, see the Spring Web Services reference guide's chapter covering
|
|
<ulink url="http://static.springframework.org/spring-ws/site/reference/html/client.html">client access</ulink>
|
|
as well as the chapter covering
|
|
<ulink url="http://static.springframework.org/spring-ws/site/reference/html/oxm.html">Object/XML mapping</ulink>.
|
|
</para>
|
|
</section>
|
|
|
|
<section id="webservices-inbound">
|
|
<title>Inbound Web Service Gateways</title>
|
|
<para>
|
|
To send a message to a channel upon receiving a Web Service invocation, there are two options again: <classname>SimpleWebServiceInboundGateway</classname> and
|
|
<classname>MarshallingWebServiceInboundGateway</classname>. The former will extract a <interfacename>javax.xml.transform.Source</interfacename>
|
|
from the <classname>WebServiceMessage</classname> and set it as the message
|
|
payload. The latter provides support for implementation of the <interfacename>Marshaller</interfacename>
|
|
and <interfacename>Unmarshaller</interfacename> interfaces.
|
|
If the incoming web service message is a SOAP message the SOAP Action header will be added to the headers of the
|
|
<classname>Message</classname> that is forwarded onto the request channel.
|
|
|
|
<programlisting language="java"> simpleGateway = new SimpleWebServiceInboundGateway();
|
|
simpleGateway.setRequestChannel(forwardOntoThisChannel);
|
|
simpleGateway.setReplyChannel(listenForResponseHere); //Optional
|
|
|
|
marshallingGateway = new MarshallingWebServiceInboundGateway(marshaller);
|
|
//set request and optionally reply channel
|
|
</programlisting>
|
|
Both gateways implement the Spring Web Services <interfacename>MessageEndpoint</interfacename>
|
|
interface, so they can be configured with a <classname>MessageDispatcherServlet</classname>
|
|
as per standard Spring Web Services configuration.
|
|
</para>
|
|
<para>
|
|
For more detail on how to use these components, see the Spring Web Services reference guide's chapter covering
|
|
<ulink url="http://static.springframework.org/spring-ws/sites/1.5/reference/html/server.html">creating a Web Service</ulink>.
|
|
The chapter covering
|
|
<ulink url="http://static.springframework.org/spring-ws/site/reference/html/oxm.html">Object/XML mapping</ulink> is also applicable again.
|
|
</para>
|
|
</section>
|
|
<section id="webservices-namespace">
|
|
<title>Web Service Namespace Support</title>
|
|
<para>
|
|
To configure an outbound Web Service Gateway, use the "outbound-gateway" element from the "ws" namespace:
|
|
<programlisting language="xml"><![CDATA[<ws:outbound-gateway id="simpleGateway"
|
|
request-channel="inputChannel"
|
|
uri="http://example.org"/>]]></programlisting>
|
|
<note>
|
|
Notice that this example does not provide a 'reply-channel'. If the Web Service were to
|
|
return a non-empty response, the Message containing that response would be sent to the
|
|
reply channel provided in the request Message's REPLY_CHANNEL header, and if that were
|
|
not available a channel resolution Exception would be thrown. If you want to send the
|
|
reply to another channel instead, then provide a 'reply-channel' attribute on the
|
|
'outbound-gateway' element.
|
|
</note>
|
|
<tip>
|
|
When invoking a Web Service that returns an empty response after using a String payload
|
|
for the request Message, <emphasis>no reply Message will be sent by default</emphasis>.
|
|
Therefore you don't need to set a 'reply-channel' or have a REPLY_CHANNEL header in the
|
|
request Message. If for any reason you actually <emphasis>do</emphasis> want to receive
|
|
the empty response as a Message, then provide the 'ignore-empty-responses' attribute with
|
|
a value of <emphasis>false</emphasis> (this only applies for Strings, because using a
|
|
Source or Document object simply leads to a NULL response and will therefore
|
|
<emphasis>never</emphasis> generate a reply Message).
|
|
</tip>
|
|
|
|
To set up an inbound Web Service Gateway, use the "inbound-gateway":
|
|
<programlisting language="xml"><![CDATA[<ws:inbound-gateway id="simpleGateway"
|
|
request-channel="inputChannel"/>]]></programlisting>
|
|
|
|
To use Spring OXM Marshallers and/or Unmarshallers, provide bean references. For outbound:
|
|
<programlisting language="xml"><![CDATA[<ws:outbound-gateway id="marshallingGateway"
|
|
request-channel="requestChannel"
|
|
uri="http://example.org"
|
|
marshaller="someMarshaller"
|
|
unmarshaller="someUnmarshaller"/>]]></programlisting>
|
|
And for inbound:
|
|
<programlisting language="xml"><![CDATA[<ws:inbound-gateway id="marshallingGateway"
|
|
request-channel="requestChannel"
|
|
marshaller="someMarshaller"
|
|
unmarshaller="someUnmarshaller"/>]]></programlisting>
|
|
|
|
<note>
|
|
Most <interfacename>Marshaller</interfacename> implementations also implement the
|
|
<interfacename>Unmarshaller</interfacename> interface. When using such a
|
|
<interfacename>Marshaller</interfacename>, only the "marshaller"
|
|
attribute is necessary. Even when using a <interfacename>Marshaller</interfacename>,
|
|
you may also provide a reference for the "request-callback" on the outbound gateways.
|
|
</note>
|
|
</para>
|
|
<para>
|
|
For either outbound gateway type, a "destination-provider" attribute can be specified instead of the "uri"
|
|
(exactly one of them is required). You can then reference any Spring Web Services DestinationProvider
|
|
implementation (e.g. to lookup the URI at runtime from a registry).
|
|
</para>
|
|
<para>
|
|
For either outbound gateway type, the "message-factory" attribute can also be configured with a reference to any
|
|
Spring Web Services <interfacename>WebServiceMessageFactory</interfacename> implementation.
|
|
</para>
|
|
<para>
|
|
For the simple inbound gateway type, the "extract-payload" attribute can be set to false to forward
|
|
the entire <interfacename>WebServiceMessage</interfacename> instead of just its payload as a
|
|
<interfacename>Message</interfacename> to the request channel. This might be useful, for example,
|
|
when a custom Transformer works against the <interfacename>WebServiceMessage</interfacename> directly.
|
|
</para>
|
|
</section>
|
|
|
|
</chapter>
|