| <?xml version="1.0" encoding="ISO-8859-1"?> |
| <document> |
| <properties> |
| <title>Apache Synapse - Quick Start Guide</title> |
| </properties> |
| <head> |
| <style type="text/css" xml:space="preserve"> |
| .command { |
| border: 1px dashed #3c78b5; |
| text-align: left; |
| background-color: #f0f0f0; |
| padding: 3px; |
| font-size: 11px; |
| font-family: Courier; |
| margin: 10px; |
| line-height: 13px; |
| } |
| .consoleOutput { |
| border: 1px dashed #3c78b5; |
| font-size: 11px; |
| font-family: Courier; |
| margin: 10px; |
| line-height: 13px; |
| background-color: #f0f0f0; |
| border-bottom: 1px dashed #3c78b5; |
| padding: 3px; |
| border-style: solid; |
| } |
| .info { |
| border-style: solid; |
| border-width: 1px; |
| border-color: #090; |
| background-color: #dfd; |
| text-align:left; |
| margin-top: 5px; |
| margin-bottom: 5px; |
| } |
| li { |
| font-family: Verdana, arial, sans-serif; |
| font-size: 11px; |
| line-height: 16px; |
| color: #000000; |
| font-weight: normal; |
| } |
| p { |
| font-family: Verdana, arial, sans-serif; |
| font-size: 11px; |
| line-height: 16px; |
| color: #000000; |
| font-weight: normal; |
| } |
| pre { |
| padding: 0px; |
| margin-top: 5px; |
| margin-left: 15px; |
| margin-bottom: 5px; |
| margin-right: 5px; |
| text-align: left; |
| background-color: #f0f0f0; |
| padding: 3px; |
| border: 1px dashed #3c78b5; |
| font-size: 11px; |
| font-family: Courier; |
| margin: 10px; |
| line-height: 13px; |
| } |
| h1 { |
| font-size: 24px; |
| line-height: normal; |
| font-weight: bold; |
| background-color: #f0f0f0; |
| color: #003366; |
| border-bottom: 1px solid #3c78b5; |
| padding: 2px; |
| margin: 36px 0px 4px 0px; |
| } |
| h2 { |
| font-size: 18px; |
| line-height: normal; |
| font-weight: bold; |
| background-color: #f0f0f0; |
| border-bottom: 1px solid #3c78b5; |
| padding: 2px; |
| margin: 27px 0px 4px 0px; |
| } |
| h3 { |
| font-size: 14px; |
| line-height: normal; |
| font-weight: bold; |
| background-color: #f0f0f0; |
| padding: 2px; |
| margin: 21px 0px 4px 0px; |
| } |
| h4 { |
| font-size: 12px; |
| line-height: normal; |
| font-weight: bold; |
| background-color: #f0f0f0; |
| padding: 2px; |
| margin: 18px 0px 4px 0px; |
| }</style> |
| </head> |
| <body> |
| <div style="margin-top:-40px; float:right; _margin-top:0px;"> |
| <img alt="Synapse logo" |
| src="images/synapse-logo-web2.png" width="197" |
| height="82"/> |
| </div> |
| <div> |
| <h1> |
| Apache Synapse ESB - Quick Start Guide |
| </h1> |
| </div> |
| <p> |
| This guide will demonstrate two sample applications covering the basic and |
| the most common usage scenarios of Synapse; which is Message mediation and |
| Service mediation (i.e. using Proxy services). You will be guided through |
| a step by step approach to get a feeling about Synapse from the absolute |
| beginning. |
| </p> |
| <h3> |
| Pre-requisites |
| </h3> |
| <p> |
| You should have following pre-requisites installed on your system to |
| follow through this guide |
| </p> |
| <ul> |
| <li> |
| A Java 2 SE - JDK or JRE of version 1.5.x or higher |
| </li> |
| <li> |
| Apache Ant <a href="http://ant.apache.org">http://ant.apache.org</a> |
| </li> |
| </ul> |
| <h2> |
| Message Mediation |
| </h2> |
| <p> |
| 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. |
| </p> |
| <h3> |
| Download |
| </h3> |
| <p> |
| Our first task is to download Synapse. Open a web browser and access the |
| following URL: |
| <a href="http://synapse.apache.org/download.html">http://synapse.apache.org/download.html</a>. |
| 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. |
| </p> |
| <h3> |
| Installation |
| </h3> |
| <p> |
| 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. |
| </p> |
| <h3> |
| Running the sample |
| </h3> |
| <p> |
| 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. |
| </p> |
| <p/> |
| <h4> |
| Starting the sample Axis2 server |
| </h4> |
| <p> |
| 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. |
| </p> |
| <p/> |
| <pre xml:space="preserve">user@host:/opt/synapse-1.1.1/samples/axis2Server$ cd src/SimpleStockQuoteService/ |
| user@host:/opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService$ ant |
| Buildfile: build.xml |
| |
| clean: |
| |
| init: |
| [mkdir] Created dir: /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp |
| [mkdir] Created dir: /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp/classes |
| [mkdir] Created dir: /opt/synapse-1.1.1/samples/axis2Server/repository/services |
| |
| compile-all: |
| [javac] Compiling 9 source files to /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp/classes |
| |
| build-service: |
| [mkdir] Created dir: /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote |
| [mkdir] Created dir: /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote/META-INF |
| [copy] Copying 1 file to /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote/META-INF |
| [copy] Copying 1 file to /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote/META-INF |
| [copy] Copying 9 files to /opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService/temp/SimpleStockQuote |
| [jar] Building jar: /opt/synapse-1.1.1/samples/axis2Server/repository/services/SimpleStockQuoteService.aar |
| |
| BUILD SUCCESSFUL |
| Total time: 2 seconds |
| user@host:/opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService$</pre> |
| <p> |
| 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). |
| </p> |
| <div class="command"> |
| <p> |
| Linux / Unix: . axis2server.sh |
| </p> |
| <p> |
| Windows: axis2server.bat |
| </p> |
| </div> |
| <p> |
| You will see the following messages on the console. |
| </p> |
| <pre xml:space="preserve">user@host:/opt/synapse-1.1.1/samples/axis2Server$ ./axis2server.sh |
| Using Bouncy castle JAR for Java 1.5 |
| Using JAVA_HOME: /opt/jdk1.5_06 |
| Using AXIS2 Repository : /opt/synapse-1.1.1/samples/axis2Server/repository |
| Using AXIS2 Configuration : /opt/synapse-1.1.1/samples/axis2Server/repository/conf/axis2.xml |
| 2007-11-05 14:36:41,462 [-] [main] INFO SimpleHTTPServer [SimpleAxisServer] Starting |
| [SimpleAxisServer] Using the Axis2 Repository : /opt/synapse-1.1.1/samples/axis2Server/repository |
| [SimpleAxisServer] Using the Axis2 Configuration File : /opt/synapse-1.1.1/samples/axis2Server/repository/conf/axis2.xml |
| 2007-11-05 14:36:43,864 [-] [main] INFO HttpCoreNIOSender HTTPS Sender starting |
| 2007-11-05 14:36:43,891 [-] [main] INFO HttpCoreNIOSender HTTP Sender starting |
| 2007-11-05 14:36:44,288 [-] [main] INFO HttpCoreNIOListener HTTPS Listener starting on port : 9002 |
| 2007-11-05 14:36:44,298 [-] [main] INFO HttpCoreNIOListener HTTP Listener starting on port : 9000 |
| 2007-11-05 14:36:44,350 [-] [main] INFO SimpleHTTPServer [SimpleAxisServer] Started</pre> |
| <p/> |
| <h4> |
| Starting Synapse |
| </h4> |
| <p> |
| 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. |
| </p> |
| <pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse"><br/> <log level="full"/> <br/> <send/> |
| </definitions> </pre> |
| <p/> |
| <p> |
| 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) |
| </p> |
| <div class="command"> |
| <p> |
| Linux / Unix: . synapse.sh -sample 0 |
| </p> |
| <p> |
| Windows: synapse.bat -sample 0 |
| </p> |
| </div> |
| <p/> |
| <p> |
| Following messages will be displayed on the console to indicate the |
| successfull startup of Synapse. |
| </p> |
| <pre xml:space="preserve">user@host:/opt/synapse-1.1.1/bin$ ./synapse.sh -sample 0 |
| Using Bouncy castle JAR for Java 1.5 |
| Starting Synapse/Java ... |
| Using SYNAPSE_HOME: /opt/synapse-1.1.1 |
| Using JAVA_HOME: /opt/jdk1.5_06 |
| Using SYNAPSE_XML: -Dsynapse.xml=/opt/synapse-1.1.1/repository/conf/sample/synapse_sample_0.xml |
| 2007-11-05 14:58:55,029 [-] [main] INFO ServerManager Using the Axis2 Repository /opt/synapse-1.1.1/repository |
| 2007-11-05 14:58:56,617 [-] [main] INFO SynapseInitializationModule Initializing Synapse at : Mon Nov 05 14:58:56 LKT 2007 |
| 2007-11-05 14:58:56,618 [127.0.1.1-asankha] [main] INFO SynapseInitializationModule Loading mediator extensions... |
| 2007-11-05 14:58:56,619 [127.0.1.1-asankha] [main] INFO SynapseInitializationModule Initializing the Synapse configuration ... |
| 2007-11-05 14:58:56,624 [127.0.1.1-asankha] [main] INFO XMLConfigurationBuilder Generating the Synapse configuration model by parsing the XML configuration |
| 2007-11-05 14:58:56,717 [127.0.1.1-asankha] [main] INFO SynapseConfigurationBuilder Loaded Synapse configuration from : /opt/synapse-1.1/repository/conf/sample/synapse_sample_0.xml |
| 2007-11-05 14:58:56,724 [127.0.1.1-asankha] [main] INFO SynapseInitializationModule Deploying the Synapse service.. |
| 2007-11-05 14:58:56,740 [127.0.1.1-asankha] [main] INFO SynapseInitializationModule Initializing Sandesha 2... |
| 2007-11-05 14:58:56,801 [127.0.1.1-asankha] [main] INFO SynapseInitializationModule Deploying Proxy services... |
| 2007-11-05 14:58:56,801 [127.0.1.1-asankha] [main] INFO SynapseInitializationModule Synapse initialized successfully...! |
| 2007-11-05 14:58:56,886 [127.0.1.1-asankha] [main] INFO HttpCoreNIOSender HTTPS Sender starting |
| 2007-11-05 14:58:56,887 [127.0.1.1-asankha] [main] INFO HttpCoreNIOSender HTTP Sender starting |
| 2007-11-05 14:58:57,039 [127.0.1.1-asankha] [main] INFO HttpCoreNIOListener HTTPS Listener starting on port : 8243 |
| 2007-11-05 14:58:57,040 [127.0.1.1-asankha] [main] INFO ServerManager Starting transport https on port 8243 |
| 2007-11-05 14:58:57,041 [127.0.1.1-asankha] [main] INFO HttpCoreNIOListener HTTP Listener starting on port : 8280 |
| 2007-11-05 14:58:57,041 [127.0.1.1-asankha] [main] INFO ServerManager Starting transport http on port 8280 |
| 2007-11-05 14:58:57,085 [127.0.1.1-asankha] [main] INFO ServerManager Starting transport vfs |
| 2007-11-05 14:58:57,086 [127.0.1.1-asankha] [main] INFO ServerManager Ready for processing</pre> |
| <p/> |
| <h4> |
| Run the client |
| </h4> |
| <p> |
| Now the final step, running the client. Go to <synapse-home>/samples/axis2Client |
| directory and type the following command |
| </p> |
| <pre xml:space="preserve">user@host:/opt/synapse-1.1.1/samples/axis2Client$ ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8280 -Dmode=quote -Dsymbol=IBM |
| Buildfile: build.xml |
| |
| init: |
| [mkdir] Created dir: /opt/synapse-1.1.1/samples/axis2Client/target/classes |
| |
| compile: |
| [javac] Compiling 10 source files to /opt/synapse-1.1.1/samples/axis2Client/target/classes |
| |
| stockquote: |
| [java] Standard :: Stock price = $91.09641757880443 |
| |
| BUILD SUCCESSFUL</pre> |
| <p/> |
| <p> |
| 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 of the actual server |
| (http://localhost:9000/soap/SimpleStockQuoteService). The actual wire |
| level http message sent by the client is as follows, and is sent over port |
| 8280 to the Synapse instance on localhost. |
| </p> |
| <pre xml:space="preserve">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/soap/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</pre> |
| <p/> |
| <p> |
| 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. |
| </p> |
| <pre xml:space="preserve">2007-11-05 15:03:51,082 [127.0.1.1-asankha] [I/O dispatcher 3] INFO PipeImpl Using native OS Pipes for event-driven to stream IO bridging |
| 2007-11-05 15:03:51,206 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SynapseMessageReceiver Synapse received a new message for message mediation... |
| 2007-11-05 15:03:51,206 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SynapseMessageReceiver Received To: http://localhost:9000/soap/SimpleStockQuoteService |
| 2007-11-05 15:03:51,206 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SynapseMessageReceiver SOAPAction: urn:getQuote |
| 2007-11-05 15:03:51,206 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SynapseMessageReceiver WSA-Action: urn:getQuote |
| 2007-11-05 15:03:51,206 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG Axis2SynapseEnvironment Injecting MessageContext |
| 2007-11-05 15:03:51,207 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG Axis2SynapseEnvironment Using Main Sequence for injected message |
| 2007-11-05 15:03:51,207 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SequenceMediator Start : Sequence <main> |
| 2007-11-05 15:03:51,207 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SequenceMediator Sequence <SequenceMediator> :: mediate() |
| 2007-11-05 15:03:51,207 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG LogMediator Start : Log mediator |
| 2007-11-05 15:03:51,231 [127.0.1.1-asankha] [HttpServerWorker-1] INFO LogMediator To: http://localhost:9000/soap/SimpleStockQuoteService, WSAction: urn:getQuote, SOAPAction: urn:getQuote, ReplyTo: http://www.w3.org/2005/08/addressing/anonymous, MessageID: urn:uuid:DB76240DF26CE9AF1D1194253430879, Direction: request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soapenv:Header><wsa:To>http://localhost:9000/soap/SimpleStockQuoteService</wsa:To><wsa:MessageID>urn:uuid:DB76240DF26CE9AF1D1194253430879</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> |
| 2007-11-05 15:03:51,250 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG LogMediator End : Log mediator |
| 2007-11-05 15:03:51,250 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SendMediator Start : Send mediator |
| 2007-11-05 15:03:51,250 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SendMediator Sending request message using implicit message properties.. |
| Sending To: http://localhost:9000/soap/SimpleStockQuoteService |
| SOAPAction: urn:getQuote |
| 2007-11-05 15:03:51,254 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG Axis2FlexibleMEPClient Sending [add = false] [sec = false] [rm = false] [ to Address: http://localhost:9000/soap/SimpleStockQuoteService] |
| 2007-11-05 15:03:51,302 [127.0.1.1-asankha] [HttpServerWorker-1] INFO TimeoutHandler This engine will expire all callbacks after : 86400 seconds, irrespective of the timeout action, after the specified or optional timeout |
| 2007-11-05 15:03:51,356 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SendMediator End : Send mediator |
| 2007-11-05 15:03:51,356 [127.0.1.1-asankha] [HttpServerWorker-1] DEBUG SequenceMediator End : Sequence <main> |
| 2007-11-05 15:03:51,398 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver Synapse received an asynchronous response message |
| 2007-11-05 15:03:51,400 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver Received To: null |
| 2007-11-05 15:03:51,400 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver SOAPAction: null |
| 2007-11-05 15:03:51,400 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SynapseCallbackReceiver WSA-Action: null |
| 2007-11-05 15:03:51,402 [127.0.1.1-asankha] [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/xsd"><ns:return type="samples.services.GetQuoteResponse"><ns:change>4.03627430702446</ns:change><ns:earnings>-9.467701672785129</ns:earnings><ns:high>191.83014686803938</ns:high><ns:last>185.42637586281398</ns:last><ns:lastTradeTimestamp>Mon Nov 05 15:03:51 LKT 2007</ns:lastTradeTimestamp><ns:low>193.2690208751758</ns:low><ns:marketCap>-1737393.107878862</ns:marketCap><ns:name>IBM Company</ns:name><ns:open>-183.2632780777984</ns:open><ns:peRatio>-17.430497030284027</ns:peRatio><ns:percentageChange>1.9749680728382655</ns:percentageChange><ns:prevClose>204.37162314344914</ns:prevClose><ns:symbol>IBM</ns:symbol><ns:volume>6695</ns:volume></ns:return></ns:getQuoteResponse></soapenv:Body></soapenv:Envelope> |
| 2007-11-05 15:03:51,404 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG Axis2SynapseEnvironment Injecting MessageContext |
| 2007-11-05 15:03:51,404 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG Axis2SynapseEnvironment Using Main Sequence for injected message |
| 2007-11-05 15:03:51,404 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SequenceMediator Start : Sequence <main> |
| 2007-11-05 15:03:51,404 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SequenceMediator Sequence <SequenceMediator> :: mediate() |
| 2007-11-05 15:03:51,404 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG LogMediator Start : Log mediator |
| 2007-11-05 15:03:51,405 [127.0.1.1-asankha] [HttpClientWorker-1] INFO LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, MessageID: urn:uuid:A6510AF6BD288D8DFB1194253431259544001-942151716, 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/xsd"><ns:return type="samples.services.GetQuoteResponse"><ns:change>4.03627430702446</ns:change><ns:earnings>-9.467701672785129</ns:earnings><ns:high>191.83014686803938</ns:high><ns:last>185.42637586281398</ns:last><ns:lastTradeTimestamp>Mon Nov 05 15:03:51 LKT 2007</ns:lastTradeTimestamp><ns:low>193.2690208751758</ns:low><ns:marketCap>-1737393.107878862</ns:marketCap><ns:name>IBM Company</ns:name><ns:open>-183.2632780777984</ns:open><ns:peRatio>-17.430497030284027</ns:peRatio><ns:percentageChange>1.9749680728382655</ns:percentageChange><ns:prevClose>204.37162314344914</ns:prevClose><ns:symbol>IBM</ns:symbol><ns:volume>6695</ns:volume></ns:return></ns:getQuoteResponse></soapenv:Body></soapenv:Envelope> |
| 2007-11-05 15:03:51,405 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG LogMediator End : Log mediator |
| 2007-11-05 15:03:51,405 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SendMediator Start : Send mediator |
| 2007-11-05 15:03:51,405 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SendMediator Sending response message using implicit message properties.. |
| Sending To: http://www.w3.org/2005/08/addressing/anonymous |
| SOAPAction: null |
| 2007-11-05 15:03:51,408 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SendMediator End : Send mediator |
| 2007-11-05 15:03:51,408 [127.0.1.1-asankha] [HttpClientWorker-1] DEBUG SequenceMediator End : Sequence <main></pre> |
| <p> |
| You have successfully completed the first part of this guide. Now let's |
| look at the next scenario, proxy services. |
| </p> |
| <p/> |
| <h2> |
| Proxy Services |
| </h2> |
| <p> |
| 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. |
| </p> |
| <p> |
| 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. |
| </p> |
| <p/> |
| <h3> |
| Running the sample |
| </h3> |
| <p> |
| 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. |
| </p> |
| <p/> |
| <h4> |
| Starting the sample Axis2 server |
| </h4> |
| <p> |
| 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. |
| </p> |
| <div class="command"> |
| <p> |
| Linux / Unix: . axis2server.sh |
| </p> |
| <p> |
| Windows: axis2server.bat |
| </p> |
| </div> |
| <p> |
| You can see the console messages as in the previous section. |
| </p> |
| <h4> |
| Starting Synapse |
| </h4> |
| <p> |
| 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. |
| </p> |
| <pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse"> |
| <proxy name="StockQuoteProxy"> |
| <target> |
| <endpoint> |
| <address uri="http://localhost:9000/soap/SimpleStockQuoteService"/> |
| </endpoint> |
| <outSequence> |
| <send/> |
| </outSequence> |
| </target> |
| <publishWSDL uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/> |
| </proxy> |
| </definitions></pre> |
| <p/> |
| <p> |
| The above configuration will expose a proxy service named StockQuoteProxy |
| and specifies an endpoint |
| (http://localhost:9000/soap/SimpleStockQuoteService) as the target for the |
| proxy service. Therefore, messages coming to the proxy service will be |
| directed to the address http://localhost:9000/soap/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. |
| </p> |
| <p/> |
| <div class="command"> |
| <p> |
| Linux / Unix: . synapse.sh -sample 150 |
| </p> |
| <p> |
| Windows: synapse.bat -sample 150 |
| </p> |
| </div> |
| <p/> |
| <p> |
| 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/soap/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. |
| </p> |
| <p/> |
| <h4> |
| Run the client |
| </h4> |
| <p> |
| Now it is time to see it in action. Go to the <synapse-home>/samples/axis2Clients |
| directory and type the following command: |
| </p> |
| <div class="command"> |
| ant stockquote -Dtrpurl=http://localhost:8280/soap/StockQuoteProxy |
| -Dmode=quote -Dsymbol=IBM |
| </div> |
| <p> |
| The above command sends a stockquote request directly to the provided |
| transport endpoint at: http://localhost:8280/soap/StockQuoteProxy. You |
| will see the response from the server displayed on the console as follows: |
| </p> |
| <div class="consoleOutput"> |
| Standard :: Stock price = $165.32687331383468 |
| </div> |
| <p/> |
| <p> |
| 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. |
| </p> |
| <p/> |
| <p> |
| 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 |
| (<a href="http://synapse.apache.org/mail-lists.html">http://synapse.apache.org/mail-lists.html</a>). |
| </p> |
| <p/> |
| <p/> |
| <p/> |
| </body> |
| </document> |