Message Mediation
In this example Synapse will be used to simply log all the messages
passing through it. Although this simple scenario only performs logging,
it demonstrates the basics of message mediation, where the logging
functionality could be replaced with any combination of advanced
mediations such as transformations, content based routing as well as
bridging between different communication protocols etc. So, let's start
with the basics.
Download
Our first task is to download Synapse. Open a web browser and access the
following URL:
http://synapse.apache.org/download.html
.
You will then see the list of available releases. Click on the latest version, and you
will be directed to the Synapse release download page. Now download the
'Standard binary distribution' ZIP or tar.gz archive compatible with your
operating system.
Installation
Synapse can be installed just by extracting the downloaded binary
archive.. A directory named synapse with the release number will be
created in the selected parent directory, containing all the files
required for Synapse. We will refer to this directory as <synapse-home>
from now on.
Running the Sample
Synapse ships with a set of sample clients and services to demonstrate
some of its core capabilities. Hence, you will need to run three programs
to get an idea of message mediation. The destination server that hosts the
ultimate service to be invoked to service the client, the client itself,
and Synapse, which acts as the intermediary to bridge between the client
and the server.
Starting the Sample Axis2 Server
In this case we are using a standalone Axis2 web services engine as the
server. You don't have to get it now, it is already bundled with your
Synapse distribution. But we have to deploy a sample service for which
client can send requests. Go to <synapse-home>/samples/axis2Server/src/SimpleStockQuoteService
directory. Run "ant" to build and deploy this service to the sample Axis2
server.
user@domain:/opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService$ ant
Buildfile: build.xml
clean:
init:
[mkdir] Created dir: /opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService/temp
[mkdir] Created dir: /opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService/temp/classes
[mkdir] Created dir: /opt/synapse-2.0.0/samples/axis2Server/repository/services
compile-all:
[javac] Compiling 9 source files to /opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService/temp/classes
build-service:
[mkdir] Created dir: /opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote
[mkdir] Created dir: /opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote/META-INF
[copy] Copying 1 file to /opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote/META-INF
[copy] Copying 9 files to /opt/synapse-2.0.0/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote
[jar] Building jar: /opt/synapse-2.0.0/samples/axis2Server/repository/services/SimpleStockQuoteService.aar
BUILD SUCCESSFUL
Total time: 1 second
Now go to <synapse-home>/samples/axis2Server directory and start the
server using the following command. This will start Axis2 server on port
9000 (http).
Linux / Unix: . axis2server.sh
Windows: axis2server.bat
You will see the following messages on the console.
Using JAVA_HOME: /opt/jdk1.6.0_16
Using AXIS2 Repository : /opt/synapse-2.0.0/samples/axis2Server/repository
Using AXIS2 Configuration : /opt/synapse-2.0.0/samples/axis2Server/repository/conf/axis2.xml
2010-11-26 01:20:55,419 [-] [main] INFO SampleAxis2ServerManager [SimpleAxisServer] Starting
[SimpleAxisServer] Using the Axis2 Repository : /opt/synapse-2.0.0/samples/axis2Server/repository
[SimpleAxisServer] Using the Axis2 Configuration File : /opt/synapse-2.0.0/samples/axis2Server/repository/conf/axis2.xml
2010-11-26 01:20:56,023 [-] [main] ERROR SandeshaModule Could not load module policies. Using default values.
2010-11-26 01:20:56,046 [-] [main] INFO HttpCoreNIOSSLSender Loading Identity Keystore from : ../../lib/identity.jks
2010-11-26 01:20:56,063 [-] [main] INFO HttpCoreNIOSSLSender Loading Trust Keystore from : ../../lib/trust.jks
2010-11-26 01:20:56,169 [-] [main] INFO HttpCoreNIOSender HTTPS Sender starting
2010-11-26 01:20:56,190 [-] [main] INFO HttpCoreNIOSender HTTP Sender starting
2010-11-26 01:20:56,191 [-] [main] INFO JMSSender JMS Sender started
2010-11-26 01:20:56,192 [-] [main] INFO JMSSender JMS Transport Sender initialized...
2010-11-26 01:20:56,295 [-] [main] INFO HttpCoreNIOSSLListener Loading Identity Keystore from : ../../lib/identity.jks
2010-11-26 01:20:56,296 [-] [main] INFO HttpCoreNIOSSLListener Loading Trust Keystore from : ../../lib/trust.jks
2010-11-26 01:20:56,299 [-] [main] INFO MailTransportListener MAILTO Listener started
2010-11-26 01:20:56,301 [-] [main] WARN MailTransportListener Unable to configure the service SimpleStockQuoteService for the MAILTO transport: Service doesn't have configuration information for transport mailto. This service is being marked as faulty and will not be available over the MAILTO transport.
2010-11-26 01:20:56,301 [-] [main] WARN MailTransportListener Disabling the mailto transport for the service SimpleStockQuoteService, because it is not configured properly for the service
2010-11-26 01:20:56,373 [-] [main] INFO HttpCoreNIOListener HTTPS Listener started on port : 9002
2010-11-26 01:20:56,396 [-] [main] INFO HttpCoreNIOListener HTTP Listener started on port : 9000
2010-11-26 01:20:56,397 [-] [main] INFO SampleAxis2ServerManager [SimpleAxisServer] Started
Starting Synapse
Now it's time to start Synapse. In this scenario we are starting Synapse
using the sample configuration found in synapse_sample_0.xml (i.e. in
repository/conf/sample) and listed below. It is configured to log and pass
through, all the messages.
<definitions xmlns="http://ws.apache.org/ns/synapse">
<sequence name="main">
<log level="full"/>
<send/>
</sequence>
</definitions>
Go to <synapse-home>/bin directory and type the command given below.
Synapse will be started on port 8280 (http) and 8243 (https - under JDK
1.5)
Linux / Unix: . synapse.sh -sample 0
Windows: synapse.bat -sample 0
Following messages will be displayed on the console to indicate the
successfull startup of Synapse.
Starting Synapse/Java ...
Using SYNAPSE_HOME: /opt/synapse-2.0.0
Using JAVA_HOME: /opt/jdk1.6.0_16
Using SYNAPSE_XML: /opt/synapse-2.0.0/repository/conf/sample/synapse_sample_0.xml
2010-11-26 01:33:03,651 [-] [main] INFO SynapseServer Starting Apache Synapse...
2010-11-26 01:33:03,683 [-] [main] INFO SynapseControllerFactory Using Synapse home : /opt/synapse-2.0.0
2010-11-26 01:33:03,683 [-] [main] INFO SynapseControllerFactory Using Axis2 repository : /opt/synapse-2.0.0/repository
2010-11-26 01:33:03,683 [-] [main] INFO SynapseControllerFactory Using axis2.xml location : /opt/synapse-2.0.0/repository/conf/axis2.xml
2010-11-26 01:33:03,683 [-] [main] INFO SynapseControllerFactory Using synapse.xml location : /opt/synapse-2.0.0/repository/conf/sample/synapse_sample_0.xml
2010-11-26 01:33:03,683 [-] [main] INFO SynapseControllerFactory Using server name : localhost
2010-11-26 01:33:03,698 [-] [main] INFO SynapseControllerFactory The timeout handler will run every : 15s
2010-11-26 01:33:03,808 [-] [main] INFO Axis2SynapseController Initializing Synapse at : Fri Nov 26 01:33:03 IST 2010
2010-11-26 01:33:04,536 [-] [main] ERROR SandeshaModule Could not load module policies. Using default values.
2010-11-26 01:33:04,560 [-] [main] INFO HttpCoreNIOSSLSender Loading Identity Keystore from : lib/identity.jks
2010-11-26 01:33:04,576 [-] [main] INFO HttpCoreNIOSSLSender Loading Trust Keystore from : lib/trust.jks
2010-11-26 01:33:04,668 [-] [main] INFO HttpCoreNIOSender HTTPS Sender starting
2010-11-26 01:33:04,674 [-] [main] INFO HttpCoreNIOSender HTTP Sender starting
2010-11-26 01:33:04,675 [-] [main] INFO JMSSender JMS Sender started
2010-11-26 01:33:04,677 [-] [main] INFO JMSSender JMS Transport Sender initialized...
2010-11-26 01:33:04,681 [-] [main] INFO VFSTransportSender VFS Sender started
2010-11-26 01:33:04,828 [-] [main] WARN JmxAdapter Using unsecured JMX remote access!
2010-11-26 01:33:04,959 [-] [main] INFO HttpCoreNIOSSLListener Loading Identity Keystore from : lib/identity.jks
2010-11-26 01:33:04,961 [-] [main] INFO HttpCoreNIOSSLListener Loading Trust Keystore from : lib/trust.jks
2010-11-26 01:33:04,976 [-] [main] INFO Axis2SynapseController Loading mediator extensions...
2010-11-26 01:33:05,013 [-] [main] INFO XMLConfigurationBuilder Generating the Synapse configuration model by parsing the XML configuration
2010-11-26 01:33:05,114 [-] [main] INFO SynapseConfigurationBuilder Loaded Synapse configuration from : /opt/synapse-2.0.0/repository/conf/sample/synapse_sample_0.xml
2010-11-26 01:33:05,158 [-] [main] INFO Axis2SynapseController Deploying the Synapse service...
2010-11-26 01:33:05,175 [-] [main] INFO Axis2SynapseController Deploying Proxy services...
2010-11-26 01:33:05,175 [-] [main] INFO Axis2SynapseController Deploying EventSources...
2010-11-26 01:33:05,190 [-] [main] INFO MailTransportListener MAILTO Listener started
2010-11-26 01:33:05,212 [-] [main] INFO HttpCoreNIOListener HTTPS Listener started on port : 8243
2010-11-26 01:33:05,215 [-] [main] INFO HttpCoreNIOListener HTTP Listener started on port : 8280
2010-11-26 01:33:05,215 [-] [main] INFO VFSTransportListener VFS Listener started
2010-11-26 01:33:05,215 [-] [main] INFO Axis2SynapseController Management using JMX available via: service:jmx:rmi:///jndi/rmi://hiranya.wso2.com:1099/synapse
2010-11-26 01:33:05,215 [-] [main] INFO ServerManager Server ready for processing...
2010-11-26 01:33:05,216 [-] [main] INFO SynapseServer Apache Synapse started successfully
Run the Client
Now the final step, running the client. Go to <synapse-home>/samples/axis2Client
directory and type the following command
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService
-Dtrpurl=http://localhost:8280 -Dmode=quote -Dsymbol=IBM
You will see the following output on the console
Buildfile: build.xml
init:
[mkdir] Created dir: /opt/synapse-2.0.0/samples/axis2Client/target/classes
compile:
[javac] Compiling 22 source files to /opt/synapse-2.0.0/samples/axis2Client/target/classes
[javac] Note: /opt/synapse-2.0.0/samples/axis2Client/src/samples/userguide/PWCallback.java uses or overrides a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: /opt/synapse-2.0.0/samples/axis2Client/src/samples/userguide/LoadbalanceFailoverClient.java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
stockquote:
[java] 2010-11-26 01:35:16,414 [-] [main] ERROR SandeshaModule Could not load module policies. Using default values.
[java] 2010-11-26 01:35:16,485 [-] [main] INFO MailTransportSender MAILTO Sender started
[java] 2010-11-26 01:35:16,496 [-] [main] INFO JMSSender JMS Sender started
[java] 2010-11-26 01:35:16,497 [-] [main] INFO JMSSender JMS Transport Sender initialized...
[java] Standard :: Stock price = $99.14593325984416
BUILD SUCCESSFUL
Total time: 5 seconds
This sends a request for a stock quote for the symbol IBM and sets the
transport URL to Synapse (http://localhost:8280) and the WS-Addressing EPR
set that to the actual server
(http://localhost:9000/services/SimpleStockQuoteService). The actual wire
level http message sent by the client is as follows, and is sent to port
8280 to the Synapse instance on localhost.
POST / HTTP/1.1
Content-Type: text/xml; charset=UTF-8
SOAPAction: "urn:getQuote"
User-Agent: Axis2
Host: 127.0.0.1
Transfer-Encoding: chunked
218
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsa:To>http://localhost:9000/services/SimpleStockQuoteService</wsa:To>
<wsa:MessageID>urn:uuid:D538B21E30B32BB8291177589283717</wsa:MessageID>
<wsa:Action>urn:getQuote</wsa:Action>
</soapenv:Header>
<soapenv:Body>
<m0:getQuote xmlns:m0="http://services.samples/xsd">
<m0:request>
<m0:symbol>IBM</m0:symbol>
</m0:request>
</m0:getQuote>
</soapenv:Body>
</soapenv:Envelope>0
Now take a look at the console running Synapse. You will see that all the
details of the mediation are logged along with all the SOAP messages
passed through Synapse. If you execute Synapse in debug mode by editing
the lib/log4j.properties "log4j.category.org.apache.synapse" as "DEBUG"
instead of INFO, you will see more information as follows after a restart
and replay of the above scenario again.
2010-11-26 01:39:42,958 [-] [HttpServerWorker-1] DEBUG SynapseMessageReceiver Synapse received a new message for message mediation...
2010-11-26 01:39:42,959 [-] [HttpServerWorker-1] DEBUG SynapseMessageReceiver Received To: http://localhost:9000/services/SimpleStockQuoteService
2010-11-26 01:39:42,959 [-] [HttpServerWorker-1] DEBUG SynapseMessageReceiver SOAPAction: urn:getQuote
2010-11-26 01:39:42,959 [-] [HttpServerWorker-1] DEBUG SynapseMessageReceiver WSA-Action: urn:getQuote
2010-11-26 01:39:42,960 [-] [HttpServerWorker-1] DEBUG Axis2SynapseEnvironment Injecting MessageContext
2010-11-26 01:39:42,960 [-] [HttpServerWorker-1] DEBUG Axis2SynapseEnvironment Using Main Sequence for injected message
2010-11-26 01:39:42,961 [-] [HttpServerWorker-1] DEBUG SequenceMediator Start : Sequence <main>
2010-11-26 01:39:42,961 [-] [HttpServerWorker-1] DEBUG SequenceMediator Sequence <SequenceMediator> :: mediate()
2010-11-26 01:39:42,961 [-] [HttpServerWorker-1] DEBUG LogMediator Start : Log mediator
2010-11-26 01:39:42,989 [-] [HttpServerWorker-1] INFO LogMediator To: http://localhost:9000/services/SimpleStockQuoteService, WSAction: urn:getQuote, SOAPAction: urn:getQuote, ReplyTo: http://www.w3.org/2005/08/addressing/anonymous, MessageID: urn:uuid:881AF81981B97048961290715782743, Direction: request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:To>http://localhost:9000/services/SimpleStockQuoteService</wsa:To><wsa:MessageID>urn:uuid:881AF81981B97048961290715782743</wsa:MessageID><wsa:Action>urn:getQuote</wsa:Action></soapenv:Header><soapenv:Body><m0:getQuote xmlns:m0="http://services.samples"><m0:request><m0:symbol>IBM</m0:symbol></m0:request></m0:getQuote></soapenv:Body></soapenv:Envelope>
2010-11-26 01:39:42,990 [-] [HttpServerWorker-1] DEBUG LogMediator End : Log mediator
2010-11-26 01:39:42,990 [-] [HttpServerWorker-1] DEBUG SendMediator Start : Send mediator
2010-11-26 01:39:42,990 [-] [HttpServerWorker-1] DEBUG SendMediator Sending request message using implicit message properties..
Sending To: http://localhost:9000/services/SimpleStockQuoteService
SOAPAction: urn:getQuote
2010-11-26 01:39:42,993 [-] [HttpServerWorker-1] DEBUG Axis2FlexibleMEPClient Sending [add = false] [sec = false] [rm = false] [to=Address: http://localhost:9000/services/SimpleStockQuoteService]
2010-11-26 01:39:42,997 [-] [HttpServerWorker-1] DEBUG Axis2FlexibleMEPClient Message [Original Request Message ID : urn:uuid:881AF81981B97048961290715782743] [New Cloned Request Message ID : urn:uuid:5e919190-98a9-4441-8bb0-d09271c2758a]
2010-11-26 01:39:43,003 [-] [HttpServerWorker-1] DEBUG SynapsePropertiesLoader Retrieving synapse properties from the cache
2010-11-26 01:39:43,003 [-] [HttpServerWorker-1] DEBUG MiscellaneousUtil The name with 'synapse.global_timeout_interval' cannot be found. Using default value : 86400000
2010-11-26 01:39:43,004 [-] [HttpServerWorker-1] INFO TimeoutHandler This engine will expire all callbacks after : 86400 seconds, irrespective of the timeout action, after the specified or optional timeout
2010-11-26 01:39:43,004 [-] [HttpServerWorker-1] DEBUG SynapsePropertiesLoader Retrieving synapse properties from the cache
2010-11-26 01:39:43,004 [-] [HttpServerWorker-1] DEBUG MiscellaneousUtil The name with 'synapse.timeout_handler_interval' cannot be found. Using default value : 15000
2010-11-26 01:39:43,039 [-] [HttpServerWorker-1] DEBUG SynapseCallbackReceiver Callback added. Total callbacks waiting for : 1
2010-11-26 01:39:43,144 [-] [HttpServerWorker-1] DEBUG SendMediator End : Send mediator
2010-11-26 01:39:43,145 [-] [HttpServerWorker-1] DEBUG SequenceMediator End : Sequence <main>
2010-11-26 01:39:43,271 [-] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver Callback removed for request message id : urn:uuid:5e919190-98a9-4441-8bb0-d09271c2758a. Pending callbacks count : 0
2010-11-26 01:39:43,271 [-] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver Synapse received an asynchronous response message
2010-11-26 01:39:43,271 [-] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver Received To: null
2010-11-26 01:39:43,271 [-] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver SOAPAction:
2010-11-26 01:39:43,271 [-] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver WSA-Action:
2010-11-26 01:39:43,272 [-] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver Body :
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:getQuoteResponse xmlns:ns="http://services.samples"><ns:return xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:GetQuoteResponse"><ax21:change>-2.533440547346707</ax21:change><ax21:earnings>12.865664096815566</ax21:earnings><ax21:high>-62.37116432061533</ax21:high><ax21:last>63.140427676860845</ax21:last><ax21:lastTradeTimestamp>Fri Nov 26 01:39:43 IST 2010</ax21:lastTradeTimestamp><ax21:low>65.32586424659065</ax21:low><ax21:marketCap>3.6215661345786005E7</ax21:marketCap><ax21:name>IBM Company</ax21:name><ax21:open>64.94029146457328</ax21:open><ax21:peRatio>23.84144924463005</ax21:peRatio><ax21:percentageChange>-3.6037604984655096</ax21:percentageChange><ax21:prevClose>70.29991444840613</ax21:prevClose><ax21:symbol>IBM</ax21:symbol><ax21:volume>9723</ax21:volume></ns:return></ns:getQuoteResponse></soapenv:Body></soapenv:Envelope>
2010-11-26 01:39:43,274 [-] [HttpClientWorker-1] DEBUG Axis2SynapseEnvironment Injecting MessageContext
2010-11-26 01:39:43,274 [-] [HttpClientWorker-1] DEBUG Axis2SynapseEnvironment Using Main Sequence for injected message
2010-11-26 01:39:43,274 [-] [HttpClientWorker-1] DEBUG SequenceMediator Start : Sequence <main>
2010-11-26 01:39:43,275 [-] [HttpClientWorker-1] DEBUG SequenceMediator Sequence <SequenceMediator> :: mediate()
2010-11-26 01:39:43,275 [-] [HttpClientWorker-1] DEBUG LogMediator Start : Log mediator
2010-11-26 01:39:43,275 [-] [HttpClientWorker-1] INFO LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , ReplyTo: http://www.w3.org/2005/08/addressing/anonymous, MessageID: urn:uuid:5e919190-98a9-4441-8bb0-d09271c2758a, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:getQuoteResponse xmlns:ns="http://services.samples"><ns:return xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:GetQuoteResponse"><ax21:change>-2.533440547346707</ax21:change><ax21:earnings>12.865664096815566</ax21:earnings><ax21:high>-62.37116432061533</ax21:high><ax21:last>63.140427676860845</ax21:last><ax21:lastTradeTimestamp>Fri Nov 26 01:39:43 IST 2010</ax21:lastTradeTimestamp><ax21:low>65.32586424659065</ax21:low><ax21:marketCap>3.6215661345786005E7</ax21:marketCap><ax21:name>IBM Company</ax21:name><ax21:open>64.94029146457328</ax21:open><ax21:peRatio>23.84144924463005</ax21:peRatio><ax21:percentageChange>-3.6037604984655096</ax21:percentageChange><ax21:prevClose>70.29991444840613</ax21:prevClose><ax21:symbol>IBM</ax21:symbol><ax21:volume>9723</ax21:volume></ns:return></ns:getQuoteResponse></soapenv:Body></soapenv:Envelope>
2010-11-26 01:39:43,275 [-] [HttpClientWorker-1] DEBUG LogMediator End : Log mediator
2010-11-26 01:39:43,275 [-] [HttpClientWorker-1] DEBUG SendMediator Start : Send mediator
2010-11-26 01:39:43,275 [-] [HttpClientWorker-1] DEBUG SendMediator Sending response message using implicit message properties..
Sending To: http://www.w3.org/2005/08/addressing/anonymous
SOAPAction:
2010-11-26 01:39:43,282 [-] [HttpClientWorker-1] DEBUG SendMediator End : Send mediator
2010-11-26 01:39:43,282 [-] [HttpClientWorker-1] DEBUG SequenceMediator End : Sequence <main>
And with that you have successfully completed the first part of this guide. Now let's
look at the next scenario, proxy services.
Proxy Services
As the name implies, a proxy service acts as a service hosted in Synapse,
and typically fronts an existing service endpoint. A proxy service can be
created and exposed on a different transport, schema, WSDL, or QoS (such
as WS-Security, WS-Reliable Messaging) aspect than the real service and
could mediate the messages before being delivered to the actual endpoint,
and the responses before they reach the client.
Clients can send requests for proxy services directly to Synapse, as the
client sees as if they are hosted on it, and for example can perform ?wsdl
and view the WSDL of the virtual proxy service. But in the Synapse
configuration, such requests can be handled in anyway you like. Most
obvious thing would be to do some processing to the message and send it to
the actual service, probably running on a different computer. But it is
not necessary to always send the message to the actual service. You may
list any combination of tasks to be performed on the messages received for
the proxy service and terminate the flow or send some java back to the
client even without sending it to an actual service. Let's explore a
simple proxy services scenario step by step to get a better feeling. As
you have downloaded and installed Synapse in the previous section, now you
can start directly on the sample.
Running the Sample
As in the previous section, there should be three entities running to
demonstrate proxy services, the server, client and Synapse. Let's start
with the server.
Starting the Sample Axis2 Server
As you have built and deployed the SimpleStockQuote service in the
previous section, you can simply start the server by switching to the <synapse-home>/samples/axis2Server
directory and running the following command.
Linux / Unix: . axis2server.sh
Windows: axis2server.bat
You can see the console messages as in the previous section.
Starting Synapse
We have to start Synapse with a configuration containing a proxy service
definition. In this case we are using the synapse_sample_150.xml, so that
you don't have to write the configuration your self.
<definitions xmlns="http://synapse.apache.org/ns/2010/04/configuraiton">
<proxy name="StockQuoteProxy">
<target>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
</endpoint>
<outSequence>
<send/>
</outSequence>
</target>
<publishWSDL uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/>
</proxy>
</definitions>
The above configuration will expose a proxy service named StockQuoteProxy
and specifies an endpoint
(http://localhost:9000/services/SimpleStockQuoteService) as the target for the
proxy service. Therefore, messages coming to the proxy service will be
directed to the address http://localhost:9000/services/SimpleStockQuoteService
specified in the endpoint. There is also an out sequence for the proxy
service, which is applicable for response messages. In the out sequence,
we just send the messages back to the client. The publishWSDL tag
specifies an WSDL to be published for this proxy service. Let's start
Synapse with this sample configuration by running the below command from
the <synapse-home>/bin directory. It is possible to specify a
sequence of mediation for incoming messages instead of a target endpoint,
and many other possibilities and options are available to configure proxy
services. These are explained in the samples and configuration guides.
Linux / Unix: . synapse.sh -sample 150
Windows: synapse.bat -sample 150
Synapse will display a set of messages as in the previous section
describing the steps of starting procedure. Before running the client, it
is time to observe another feature of proxy services. That is displaying
the published WSDL. Just open a web browser and point it to the address
http://localhost:8280/services/StockQuoteProxy?wsdl. You will see the
sample_proxy_1.wsdl specified in the configuration but containing the
correct EPR for the service over HTTP/S.
Run the Client
Now it is time to see it in action. Go to the <synapse-home>/samples/axis2Clients
directory and type the following command:
ant stockquote -Dtrpurl=http://localhost:8280/services/StockQuoteProxy
-Dmode=quote -Dsymbol=IBM
The above command sends a stockquote request directly to the provided
transport endpoint at: http://localhost:8280/services/StockQuoteProxy. You
will see the response from the server displayed on the console as follows:
Standard :: Stock price = $165.32687331383468
This quick guide illustrates the simple use case of proxy services. Please
refer to samples #150 and above in the Samples guide, for in depth
coverage of more advanced use cases.
Yes, you are done with a quick look at Synapse. Now it is time to go
deeper and reveal the advanced features of Synapse. You can browse through
the samples for your interested areas. If you have any issue regarding
Synapse as a user, feel free ask it in the Synapse user mailing list
(http://synapse.apache.org/mail-lists.html
).