You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/02/20 12:53:05 UTC
svn commit: r379109 [2/2] - in /incubator/servicemix/trunk: ./ etc/
servicemix-assembly/ servicemix-bpe/ servicemix-bpe/src/
servicemix-bpe/src/main/ servicemix-bpe/src/main/java/
servicemix-bpe/src/main/java/org/ servicemix-bpe/src/main/java/org/apach...
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEComponentTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEComponentTest.java?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEComponentTest.java (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEComponentTest.java Mon Feb 20 03:52:58 2006
@@ -0,0 +1,353 @@
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.bpe;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URL;
+
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.Fault;
+import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerException;
+
+import junit.framework.TestCase;
+
+import org.apache.servicemix.MessageExchangeListener;
+import org.apache.servicemix.bpe.BPEComponent;
+import org.apache.servicemix.client.DefaultServiceMixClient;
+import org.apache.servicemix.client.ServiceMixClient;
+import org.apache.servicemix.components.util.ComponentSupport;
+import org.apache.servicemix.http.HttpEndpoint;
+import org.apache.servicemix.http.HttpSpringComponent;
+import org.apache.servicemix.jbi.container.ActivationSpec;
+import org.apache.servicemix.jbi.container.JBIContainer;
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.jbi.messaging.MessageExchangeSupport;
+import org.apache.servicemix.jbi.util.DOMUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.traversal.NodeIterator;
+
+import com.sun.org.apache.xpath.internal.CachedXPathAPI;
+
+public class BPEComponentTest extends TestCase {
+
+ private JBIContainer jbi;
+ private BPEComponent bpe;
+ private ServiceMixClient client;
+
+ protected void setUp() throws Exception {
+ jbi = new JBIContainer();
+ jbi.setFlowName("st");
+ jbi.setEmbedded(true);
+ jbi.setUseMBeanServer(false);
+ jbi.init();
+ client = new DefaultServiceMixClient(jbi);
+ bpe = new BPEComponent();
+ jbi.activateComponent(bpe, "bpe");
+ }
+
+ protected void tearDown() throws Exception {
+ if (jbi != null) {
+ jbi.shutDown();
+ }
+ }
+
+ protected void registerCreditAgency() throws Exception {
+ ActivationSpec creditAgency = new ActivationSpec();
+ creditAgency.setInterfaceName(new QName("urn:logicblaze:soa:creditagency", "CreditAgency"));
+ creditAgency.setComponent(new CreditAgency());
+ jbi.activateComponent(creditAgency);
+ }
+
+ protected void registerBanks() throws Exception {
+ for (int i = 1; i <= 5; i++) {
+ ActivationSpec bank = new ActivationSpec();
+ bank.setInterfaceName(new QName("urn:logicblaze:soa:bank", "Bank"));
+ bank.setComponent(new Bank(i));
+ jbi.activateComponent(bank);
+ }
+ }
+
+
+ protected void registerHttp() throws Exception {
+ HttpSpringComponent http = new HttpSpringComponent();
+ HttpEndpoint ep = new HttpEndpoint();
+ ep.setSoap(true);
+ ep.setDefaultMep(MessageExchangeSupport.IN_OUT);
+ ep.setRoleAsString("consumer");
+ ep.setService(new QName("urn:logicblaze:soa:loanbroker", "LoanBrokerService"));
+ ep.setEndpoint("loanbroker");
+ ep.setLocationURI("http://localhost:8192");
+ http.setEndpoints(new HttpEndpoint[] { ep });
+ jbi.activateComponent(http, "http");
+ }
+
+ public static void copyInputStream(InputStream in, OutputStream out) throws IOException {
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = in.read(buffer)) >= 0) {
+ out.write(buffer, 0, len);
+ }
+ }
+
+ public void testWithHttp() throws Exception {
+ registerCreditAgency();
+ registerBanks();
+ registerHttp();
+ jbi.start();
+
+ URL url = getClass().getClassLoader().getResource("loanbroker/loanbroker.bpel");
+ File path = new File(new URI(url.toString()));
+ path = path.getParentFile();
+ bpe.getServiceUnitManager().deploy("loanbroker", path.getAbsolutePath());
+ bpe.getServiceUnitManager().start("loanbroker");
+
+ HttpURLConnection con = (HttpURLConnection) new URL("http://localhost:8192").openConnection();
+ con.setDoOutput(true);
+ con.setDoInput(true);
+ InputStream is = getClass().getClassLoader().getResourceAsStream("request.xml");
+ OutputStream os = con.getOutputStream();
+ copyInputStream(is, os);
+ copyInputStream(con.getInputStream(), System.out);
+ }
+
+ public void testBPEOk() throws Exception {
+ registerCreditAgency();
+ registerBanks();
+ jbi.start();
+
+ URL url = getClass().getClassLoader().getResource("loanbroker/loanbroker.bpel");
+ File path = new File(new URI(url.toString()));
+ path = path.getParentFile();
+ bpe.getServiceUnitManager().deploy("loanbroker", path.getAbsolutePath());
+ bpe.getServiceUnitManager().start("loanbroker");
+
+ //
+ // Message for bank1 and bank2
+ //
+ MessageExchange me = client.createInOutExchange();
+ me.setService(new QName("urn:logicblaze:soa:loanbroker", "LoanBrokerService"));
+ me.setOperation(new QName("getLoanQuote"));
+ me.getMessage("in").setContent(new StringSource("<getLoanQuoteRequest xmlns=\"urn:logicblaze:soa:loanbroker\"><ssn>1234341</ssn><amount>100000.0</amount><duration>12</duration></getLoanQuoteRequest>"));
+ long t0 = System.currentTimeMillis();
+ client.sendSync(me);
+ long t1 = System.currentTimeMillis();
+ if (me.getError() != null) {
+ throw me.getError();
+ }
+ assertEquals(ExchangeStatus.ACTIVE, me.getStatus());
+ String out = new SourceTransformer().contentToString(me.getMessage("out"));
+ System.err.println(out);
+ System.err.println("Time: " + (t1 - t0));
+ client.done(me);
+
+ //
+ // Message for bank3 and bank4
+ //
+ me = client.createInOutExchange();
+ me.setService(new QName("urn:logicblaze:soa:loanbroker", "LoanBrokerService"));
+ me.setOperation(new QName("getLoanQuote"));
+ me.getMessage("in").setContent(new StringSource("<getLoanQuoteRequest xmlns=\"urn:logicblaze:soa:loanbroker\"><ssn>1234341</ssn><amount>50000.0</amount><duration>12</duration></getLoanQuoteRequest>"));
+ t0 = System.currentTimeMillis();
+ client.sendSync(me);
+ t1 = System.currentTimeMillis();
+ if (me.getError() != null) {
+ throw me.getError();
+ }
+ assertEquals(ExchangeStatus.ACTIVE, me.getStatus());
+ out = new SourceTransformer().contentToString(me.getMessage("out"));
+ System.err.println(out);
+ System.err.println("Time: " + (t1 - t0));
+ client.done(me);
+
+ //
+ // Message for bank5
+ //
+ me = client.createInOutExchange();
+ me.setService(new QName("urn:logicblaze:soa:loanbroker", "LoanBrokerService"));
+ me.setOperation(new QName("getLoanQuote"));
+ me.getMessage("in").setContent(new StringSource("<getLoanQuoteRequest xmlns=\"urn:logicblaze:soa:loanbroker\"><ssn>1234341</ssn><amount>1200.0</amount><duration>12</duration></getLoanQuoteRequest>"));
+ t0 = System.currentTimeMillis();
+ client.sendSync(me);
+ t1 = System.currentTimeMillis();
+ if (me.getError() != null) {
+ throw me.getError();
+ }
+ assertEquals(ExchangeStatus.ACTIVE, me.getStatus());
+ out = new SourceTransformer().contentToString(me.getMessage("out"));
+ System.err.println(out);
+ System.err.println("Time: " + (t1 - t0));
+ client.done(me);
+ }
+
+ public void testBPEWithFault() throws Exception {
+ registerCreditAgency();
+ jbi.start();
+
+ URL url = getClass().getClassLoader().getResource("loanbroker/loanbroker.bpel");
+ File path = new File(new URI(url.toString()));
+ path = path.getParentFile();
+ bpe.getServiceUnitManager().deploy("loanbroker", path.getAbsolutePath());
+ bpe.getServiceUnitManager().start("loanbroker");
+
+ MessageExchange me = client.createInOutExchange();
+ me.setService(new QName("urn:logicblaze:soa:loanbroker", "LoanBrokerService"));
+ me.setOperation(new QName("getLoanQuote"));
+ me.getMessage("in").setContent(new StringSource("<getLoanQuoteRequest xmlns=\"urn:logicblaze:soa:loanbroker\"><ssn>234341</ssn></getLoanQuoteRequest>"));
+ client.sendSync(me);
+ assertEquals(ExchangeStatus.ERROR, me.getStatus());
+ assertNotNull(me.getFault());
+ client.done(me);
+ }
+
+ public void testBPEWithException() throws Exception {
+ registerCreditAgency();
+ jbi.start();
+
+ URL url = getClass().getClassLoader().getResource("loanbroker/loanbroker.bpel");
+ File path = new File(new URI(url.toString()));
+ path = path.getParentFile();
+ bpe.getServiceUnitManager().deploy("loanbroker", path.getAbsolutePath());
+ bpe.getServiceUnitManager().start("loanbroker");
+
+ MessageExchange me = client.createInOutExchange();
+ me.setService(new QName("urn:logicblaze:soa:loanbroker", "LoanBrokerService"));
+ me.setOperation(new QName("getLoanQuote"));
+ me.getMessage("in").setContent(new StringSource("<getLoanQuoteRequest xmlns=\"urn:logicblaze:soa:loanbroker\"><ssn></ssn></getLoanQuoteRequest>"));
+ client.sendSync(me);
+ assertEquals(ExchangeStatus.ERROR, me.getStatus());
+ assertNotNull(me.getError());
+ client.done(me);
+ }
+
+ public static class Bank extends ComponentSupport implements MessageExchangeListener {
+
+ public Bank(int number) {
+ setService(new QName("urn:logicblaze:soa:bank", "Bank" + number));
+ setEndpoint("bank");
+ }
+
+ public void onMessageExchange(MessageExchange exchange) throws MessagingException {
+ InOut inOut = (InOut) exchange;
+ if (inOut.getStatus() == ExchangeStatus.DONE) {
+ return;
+ } else if (inOut.getStatus() == ExchangeStatus.ERROR) {
+ done(inOut);
+ return;
+ }
+ System.err.println(getService().getLocalPart() + " requested");
+ try {
+ String output = "<getLoanQuoteResponse xmlns=\"urn:logicblaze:soa:bank\"><rate>" + (Math.ceil(1000 * Math.random()) / 100) + "</rate></getLoanQuoteResponse>";
+ NormalizedMessage answer = inOut.createMessage();
+ answer.setContent(new StringSource(output));
+ answer(inOut, answer);
+ } catch (Exception e) {
+ throw new MessagingException(e);
+ }
+ }
+ }
+
+ public static class CreditAgency extends ComponentSupport implements MessageExchangeListener {
+
+ public CreditAgency() {
+ setService(new QName("urn:logicblaze:soa:creditagency", "CreditAgencyService"));
+ setEndpoint("agency");
+ }
+
+ public void onMessageExchange(MessageExchange exchange) throws MessagingException {
+ InOut inOut = (InOut) exchange;
+ if (inOut.getStatus() == ExchangeStatus.DONE) {
+ return;
+ } else if (inOut.getStatus() == ExchangeStatus.ERROR) {
+ done(inOut);
+ return;
+ }
+ try {
+ Document doc = (Document) new SourceTransformer().toDOMNode(inOut.getInMessage());
+ String ssn = textValueOfXPath(doc, "//*[local-name()='ssn']");
+ if (ssn == null || ssn.length() == 0) {
+ fail(exchange, new NullPointerException());
+ return;
+ }
+ if (!ssn.startsWith("1")) {
+ Fault fault = inOut.createFault();
+ fault.setContent(new StringSource("<InvalidSSN xmlns=\"urn:logicblaze:soa:creditagency\"><ssn>" + ssn + "</ssn></InvalidSSN>"));
+ fail(inOut, fault);
+ } else {
+ String operation = null;
+ if (inOut.getOperation() != null) {
+ operation = inOut.getOperation().getLocalPart();
+ } else {
+ operation = doc.getDocumentElement().getLocalName();
+ }
+ String output;
+ if ("getCreditScore".equals(operation)) {
+ output = "<getCreditScoreResponse xmlns=\"urn:logicblaze:soa:creditagency\"><score>" + getCreditScore(ssn) + "</score></getCreditScoreResponse>";
+ } else if ("getCreditHistoryLength".equals(operation)) {
+ output = "<getCreditHistoryLengthResponse xmlns=\"urn:logicblaze:soa:creditagency\"><length>" + getCreditHistoryLength(ssn) + "</length></getCreditHistoryLengthResponse>";
+ } else {
+ throw new UnsupportedOperationException(operation);
+ }
+ NormalizedMessage answer = inOut.createMessage();
+ answer.setContent(new StringSource(output));
+ answer(inOut, answer);
+ }
+ } catch (Exception e) {
+ throw new MessagingException(e);
+ }
+ }
+ int getCreditScore(String ssn) {
+ //return ((int) (Math.random() * 600) + 300);
+ return 1000;
+ }
+ int getCreditHistoryLength(String ssn) {
+ //return ((int) (Math.random() * 19) + 1);
+ return 10;
+ }
+
+ }
+
+ protected static String textValueOfXPath(Node node, String xpath) throws TransformerException {
+ CachedXPathAPI cachedXPathAPI = new CachedXPathAPI();
+ NodeIterator iterator = cachedXPathAPI.selectNodeIterator(node, xpath);
+ Node root = iterator.nextNode();
+ if (root instanceof Element) {
+ Element element = (Element) root;
+ if (element == null) {
+ return "";
+ }
+ String text = DOMUtil.getElementText(element);
+ return text;
+ }
+ else if (root != null) {
+ return root.getNodeValue();
+ } else {
+ return null;
+ }
+ }
+}
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEDeployerTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEDeployerTest.java?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEDeployerTest.java (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/BPEDeployerTest.java Mon Feb 20 03:52:58 2006
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.bpe;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+import org.apache.servicemix.bpe.BPEComponent;
+import org.apache.servicemix.bpe.BPEDeployer;
+import org.apache.servicemix.common.ServiceUnit;
+
+public class BPEDeployerTest extends TestCase {
+
+ public void testDeploy() throws Exception {
+ URL url = getClass().getClassLoader().getResource("loanbroker/loanbroker.bpel");
+ File path = new File(new URI(url.toString()));
+ path = path.getParentFile();
+
+ BPEComponent bpe = new BPEComponent();
+ ((BPELifeCycle) bpe.getLifeCycle()).doInit();
+ BPEDeployer deployer = new BPEDeployer(bpe);
+ assertTrue(deployer.canDeploy("loanbroker", path.getAbsolutePath()));
+
+ ServiceUnit su = deployer.deploy("loanbroker", path.getAbsolutePath());
+ assertNotNull(su);
+ }
+
+}
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/util/FileSystemJarInputStreamTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/util/FileSystemJarInputStreamTest.java?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/util/FileSystemJarInputStreamTest.java (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/java/org/apache/servicemix/bpe/util/FileSystemJarInputStreamTest.java Mon Feb 20 03:52:58 2006
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.bpe.util;
+
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+
+import org.apache.servicemix.bpe.util.FileSystemJarInputStream;
+
+import junit.framework.TestCase;
+
+public class FileSystemJarInputStreamTest extends TestCase {
+
+ private static final int BUFFER = 2048;
+
+ public void testInputStream() throws Exception {
+ File f = new File("target/test-data");
+ f.mkdirs();
+ Writer w = new OutputStreamWriter(new FileOutputStream(new File(f, "test.txt")));
+ w.write("<hello>world</hello>");
+ w.close();
+
+ FileSystemJarInputStream fsjis = new FileSystemJarInputStream(f);
+ JarInputStream jis = new JarInputStream(fsjis);
+
+ JarEntry entry = jis.getNextJarEntry();
+ assertNotNull(entry);
+ assertEquals("test.txt", entry.getName());
+
+ // Copy data from jar file into byte array
+ BufferedOutputStream dest = null;
+ ByteArrayOutputStream baos = null;
+ int count; // buffer counter
+ byte data[] = new byte[BUFFER];
+ baos = new ByteArrayOutputStream();
+ dest = new BufferedOutputStream(baos, BUFFER);
+ while ((count = jis.read(data, 0, BUFFER)) != -1) {
+ dest.write(data, 0, count);
+ }
+ dest.close();
+ System.out.println(entry.getName() + ": " + baos.toString());
+
+ assertEquals("<hello>world</hello>", baos.toString());
+ }
+
+}
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/bank.wsdl
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/bank.wsdl?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/bank.wsdl (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/bank.wsdl Mon Feb 20 03:52:58 2006
@@ -0,0 +1,48 @@
+<definitions targetNamespace="urn:logicblaze:soa:bank"
+ xmlns:tns="urn:logicblaze:soa:bank"
+ xmlns:typens="urn:logicblaze:soa:bank:types"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
+
+ <types>
+ <xsd:schema
+ targetNamespace="urn:logicblaze:soa:bank:types"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:complexType name="getLoanQuoteRequest">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ <xsd:element name="amount" type="xsd:double" />
+ <xsd:element name="duration" type="xsd:int" />
+ <xsd:element name="score" type="xsd:int" />
+ <xsd:element name="length" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="getLoanQuoteResponse">
+ <xsd:sequence>
+ <xsd:element name="rate" type="xsd:double" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ </xsd:schema>
+ </types>
+
+ <message name="getLoanQuoteRequest">
+ <part name="payload" type="typens:getLoanQuoteRequest" />
+ </message>
+
+ <message name="getLoanQuoteResponse">
+ <part name="payload" type="typens:getLoanQuoteResponse" />
+ </message>
+
+ <portType name="Bank">
+ <operation name="getLoanQuote">
+ <input message="tns:getLoanQuoteRequest" />
+ <output message="tns:getLoanQuoteResponse" />
+ </operation>
+ </portType>
+
+</definitions>
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/creditagency.wsdl
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/creditagency.wsdl?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/creditagency.wsdl (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/creditagency.wsdl Mon Feb 20 03:52:58 2006
@@ -0,0 +1,88 @@
+<definitions targetNamespace="urn:logicblaze:soa:creditagency"
+ xmlns:tns="urn:logicblaze:soa:creditagency"
+ xmlns:typens="urn:logicblaze:soa:creditagency:types"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
+
+ <types>
+ <xsd:schema
+ targetNamespace="urn:logicblaze:soa:creditagency:types"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:complexType name="getCreditScoreRequest">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="getCreditScoreResponse">
+ <xsd:sequence>
+ <xsd:element name="score" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="getCreditHistoryLengthRequest">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="getCreditHistoryLengthResponse">
+ <xsd:sequence>
+ <xsd:element name="length" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="unknownSSNFault">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ </xsd:schema>
+ </types>
+
+ <message name="getCreditScoreRequest">
+ <part name="payload" type="typens:getCreditScoreRequest" />
+ </message>
+
+ <message name="getCreditScoreResponse">
+ <part name="payload" type="typens:getCreditScoreResponse" />
+ </message>
+
+ <message name="getCreditHistoryLengthRequest">
+ <part name="payload"
+ type="typens:getCreditHistoryLengthRequest" />
+ </message>
+
+ <message name="getCreditHistoryLengthResponse">
+ <part name="payload"
+ type="typens:getCreditHistoryLengthResponse" />
+ </message>
+
+ <message name="unknownSSNFault">
+ <part name="payload" type="typens:unknownSSNFault" />
+ </message>
+
+ <message name="invalidSSNFault">
+ <part name="payload" type="typens:invalidSSNFault" />
+ </message>
+
+ <portType name="CreditAgency">
+ <operation name="getCreditScore">
+ <input message="tns:getCreditScoreRequest" />
+ <output message="tns:getCreditScoreResponse" />
+ <fault name="UnknownSSN" message="tns:unknownSSNFault" />
+ <fault name="InvalidSSN" message="tns:invalidSSNFault" />
+ </operation>
+ <operation name="getCreditHistoryLength">
+ <input message="tns:getCreditHistoryLengthRequest" />
+ <output message="tns:getCreditHistoryLengthResponse" />
+ <fault name="UnknownSSN" message="tns:unknownSSNFault">
+ </fault>
+ </operation>
+ </portType>
+
+</definitions>
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.bpel
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.bpel?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.bpel (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.bpel Mon Feb 20 03:52:58 2006
@@ -0,0 +1,229 @@
+<bpel:process name="loanbrokerProcess"
+ targetNamespace="urn:logicblaze:soa:loanbroker"
+ xmlns:tns="urn:logicblaze:soa:loanbroker"
+ xmlns:ca="urn:logicblaze:soa:creditagency"
+ xmlns:bk="urn:logicblaze:soa:bank"
+ xmlns:svc="urn:logicblaze:soa:service" suppressJoinFailure="yes"
+ xmlns:bpel="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:sm="http://servicemix.apache.org/schemas/bpe/1.0"
+ xsi:schemaLocation="http://schemas.xmlsoap.org/ws/2003/03/business-process/ http://schemas.xmlsoap.org/ws/2003/03/business-process/">
+
+ <bpel:variables>
+ <bpel:variable name="request" messageType="tns:getLoanQuoteRequest" />
+ <bpel:variable name="response" messageType="tns:getLoanQuoteResponse" />
+ <bpel:variable name="ca-score-request" messageType="ca:getCreditScoreRequest" />
+ <bpel:variable name="ca-score-response" messageType="ca:getCreditScoreResponse" />
+ <bpel:variable name="ca-history-request" messageType="ca:getCreditHistoryLengthRequest" />
+ <bpel:variable name="ca-history-response" messageType="ca:getCreditHistoryLengthResponse" />
+ <bpel:variable name="bk-loanquote-request" messageType="bk:getLoanQuoteRequest" />
+ <bpel:variable name="bk-loanquote-response-1" messageType="bk:getLoanQuoteResponse" />
+ <bpel:variable name="bk-loanquote-response-2" messageType="bk:getLoanQuoteResponse" />
+ <bpel:variable name="bk-loanquote-response-3" messageType="bk:getLoanQuoteResponse" />
+ <bpel:variable name="bk-loanquote-response-4" messageType="bk:getLoanQuoteResponse" />
+ <bpel:variable name="bk-loanquote-response-5" messageType="bk:getLoanQuoteResponse" />
+ <bpel:variable name="invalidSSN" messageType="tns:invalidSSNFault" />
+ <bpel:variable name="unknownSSN" messageType="tns:unknownSSNFault" />
+ </bpel:variables>
+
+ <bpel:faultHandlers>
+ <bpel:catch faultName="ca:InvalidSSN">
+ <bpel:sequence>
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from variable="request" part="payload" query="/tns:getLoanQuoteRequest/tns:ssn" />
+ <bpel:to variable="invalidSSN" part="payload" query="/tns:invalidSSNFault/tns:ssn" />
+ </bpel:copy>
+ </bpel:assign>
+ <bpel:reply name="response" partnerLink="LoanBrokerResponse"
+ portType="tns:LoanBroker" operation="getLoanQuote"
+ variable="invalidSSN" faultName="tns:InvalidSSN" >
+ </bpel:reply>
+ </bpel:sequence>
+ </bpel:catch>
+ <bpel:catch faultName="ca:UnkownSSN">
+ <bpel:sequence>
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from variable="request" part="payload" query="/tns:getLoanQuoteRequest/tns:ssn" />
+ <bpel:to variable="unknownSSN" part="payload" query="/tns:unknownSSNFault/tns:ssn" />
+ </bpel:copy>
+ </bpel:assign>
+ <bpel:reply name="response" partnerLink="LoanBrokerResponse"
+ portType="tns:LoanBroker" operation="getLoanQuote"
+ variable="unknownSSN" faultName="tns:unknownSSN" >
+ </bpel:reply>
+ </bpel:sequence>
+ </bpel:catch>
+ </bpel:faultHandlers>
+
+ <bpel:sequence>
+ <bpel:receive name="request" partnerLink="LoanBrokerRequest"
+ portType="tns:LoanBroker" operation="getLoanQuote" variable="request"
+ createInstance="yes">
+ </bpel:receive>
+
+
+ <bpel:flow>
+
+ <bpel:sequence>
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from variable="request" part="payload" query="/tns:getLoanQuoteRequest/tns:ssn" />
+ <bpel:to variable="ca-history-request" part="payload" query="/ca:getCreditHistoryLengthRequest/ca:ssn" />
+ </bpel:copy>
+ </bpel:assign>
+
+ <bpel:invoke name="service" partnerLink="CreditAgency"
+ portType="ca:CreditAgency" operation="getCreditHistoryLength"
+ inputVariable="ca-history-request"
+ outputVariable="ca-history-response" />
+ </bpel:sequence>
+
+ <bpel:sequence>
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from variable="request" part="payload" query="/tns:getLoanQuoteRequest/tns:ssn" />
+ <bpel:to variable="ca-score-request" part="payload" query="/ca:getCreditScoreRequest/ca:ssn" />
+ </bpel:copy>
+ </bpel:assign>
+
+ <bpel:invoke name="service" partnerLink="CreditAgency"
+ portType="ca:CreditAgency" operation="getCreditScore"
+ inputVariable="ca-score-request"
+ outputVariable="ca-score-response" />
+ </bpel:sequence>
+ </bpel:flow>
+
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from variable="request" part="payload" query="/tns:getLoanQuoteRequest/tns:ssn" />
+ <bpel:to variable="bk-loanquote-request" part="payload" query="/bk:getLoanQuoteRequest/bk:ssn"/>
+ </bpel:copy>
+ <bpel:copy>
+ <bpel:from variable="request" part="payload" query="/tns:getLoanQuoteRequest/tns:amount" />
+ <bpel:to variable="bk-loanquote-request" part="payload" query="/bk:getLoanQuoteRequest/bk:amount"/>
+ </bpel:copy>
+ <bpel:copy>
+ <bpel:from variable="request" part="payload" query="/tns:getLoanQuoteRequest/tns:duration" />
+ <bpel:to variable="bk-loanquote-request" part="payload" query="/bk:getLoanQuoteRequest/bk:duration"/>
+ </bpel:copy>
+ <bpel:copy>
+ <bpel:from variable="ca-score-response" part="payload" query="/ca:getCreditScoreResponse/ca:score" />
+ <bpel:to variable="bk-loanquote-request" part="payload" query="/bk:getLoanQuoteRequest/bk:score"/>
+ </bpel:copy>
+ <bpel:copy>
+ <bpel:from variable="ca-history-response" part="payload" query="/ca:getCreditHistoryLengthResponse/ca:length" />
+ <bpel:to variable="bk-loanquote-request" part="payload" query="/bk:getLoanQuoteRequest/bk:length"/>
+ </bpel:copy>
+ </bpel:assign>
+
+ <bpel:switch>
+
+ <bpel:case condition="getVariableData('bk-loanquote-request', 'payload', '/bk:getLoanQuoteRequest/bk:amount') >= 75000.0 and
+ getVariableData('bk-loanquote-request', 'payload', '/bk:getLoanQuoteRequest/bk:score') >= 600 and
+ getVariableData('bk-loanquote-request', 'payload', '/bk:getLoanQuoteRequest/bk:length') >= 8">
+ <bpel:sequence>
+ <bpel:flow>
+ <bpel:invoke name="bank1" partnerLink="Bank1"
+ portType="bk:Bank" operation="getLoanQuote"
+ inputVariable="bk-loanquote-request"
+ outputVariable="bk-loanquote-response-1"
+ sm:endpoint="urn:logicblaze:soa:bank:Bank1:bank" />
+
+ <bpel:invoke name="bank2" partnerLink="Bank2"
+ portType="bk:Bank" operation="getLoanQuote"
+ inputVariable="bk-loanquote-request"
+ outputVariable="bk-loanquote-response-2"
+ sm:endpoint="urn:logicblaze:soa:bank:Bank2:bank" />
+ </bpel:flow>
+ <bpel:switch>
+ <bpel:case condition="getVariableData('bk-loanquote-response-1', 'payload', '/bk:getLoanQuoteResponse/bk:rate') >
+ getVariableData('bk-loanquote-response-2', 'payload', '/bk:getLoanQuoteResponse/bk:rate')">
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from expression="getVariableData('bk-loanquote-response-2', 'payload', '/bk:getLoanQuoteResponse/bk:rate')" />
+ <bpel:to variable="response" part="payload" query="/tns:getLoanQuoteResponse/tns:rate" />
+ </bpel:copy>
+ </bpel:assign>
+ </bpel:case>
+ <bpel:otherwise>
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from expression="getVariableData('bk-loanquote-response-1', 'payload', '/bk:getLoanQuoteResponse/bk:rate')" />
+ <bpel:to variable="response" part="payload" query="/tns:getLoanQuoteResponse/tns:rate" />
+ </bpel:copy>
+ </bpel:assign>
+ </bpel:otherwise>
+ </bpel:switch>
+ </bpel:sequence>
+ </bpel:case>
+
+ <bpel:case condition="getVariableData('bk-loanquote-request', 'payload', '/bk:getLoanQuoteRequest/bk:amount') >= 10000.0 and
+ getVariableData('bk-loanquote-request', 'payload', '/bk:getLoanQuoteRequest/bk:amount') < 75000.0 and
+ getVariableData('bk-loanquote-request', 'payload', '/bk:getLoanQuoteRequest/bk:score') >= 400 and
+ getVariableData('bk-loanquote-request', 'payload', '/bk:getLoanQuoteRequest/bk:length') >= 3">
+
+ <bpel:sequence>
+ <bpel:flow>
+ <bpel:invoke name="bank3" partnerLink="Bank3"
+ portType="bk:Bank" operation="getLoanQuote"
+ inputVariable="bk-loanquote-request"
+ outputVariable="bk-loanquote-response-3"
+ sm:endpoint="urn:logicblaze:soa:bank:Bank3:bank" />
+
+ <bpel:invoke name="bank4" partnerLink="Bank4"
+ portType="bk:Bank" operation="getLoanQuote"
+ inputVariable="bk-loanquote-request"
+ outputVariable="bk-loanquote-response-4"
+ sm:endpoint="urn:logicblaze:soa:bank:Bank4:bank" />
+ </bpel:flow>
+ <bpel:switch>
+ <bpel:case condition="getVariableData('bk-loanquote-response-3', 'payload', '/bk:getLoanQuoteResponse/bk:rate') >
+ getVariableData('bk-loanquote-response-4', 'payload', '/bk:getLoanQuoteResponse/bk:rate')">
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from expression="getVariableData('bk-loanquote-response-4', 'payload', '/bk:getLoanQuoteResponse/bk:rate')" />
+ <bpel:to variable="response" part="payload" query="/tns:getLoanQuoteResponse/tns:rate" />
+ </bpel:copy>
+ </bpel:assign>
+ </bpel:case>
+ <bpel:otherwise>
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from expression="getVariableData('bk-loanquote-response-3', 'payload', '/bk:getLoanQuoteResponse/bk:rate')" />
+ <bpel:to variable="response" part="payload" query="/tns:getLoanQuoteResponse/tns:rate" />
+ </bpel:copy>
+ </bpel:assign>
+ </bpel:otherwise>
+ </bpel:switch>
+ </bpel:sequence>
+ </bpel:case>
+
+ <bpel:otherwise>
+
+ <bpel:sequence>
+ <bpel:invoke name="bank5" partnerLink="Bank5"
+ portType="bk:Bank" operation="getLoanQuote"
+ inputVariable="bk-loanquote-request"
+ outputVariable="bk-loanquote-response-5"
+ sm:endpoint="urn:logicblaze:soa:bank:Bank5:bank" />
+ <bpel:assign>
+ <bpel:copy>
+ <bpel:from expression="getVariableData('bk-loanquote-response-5', 'payload', '/bk:getLoanQuoteResponse/bk:rate')" />
+ <bpel:to variable="response" part="payload" query="/tns:getLoanQuoteResponse/tns:rate" />
+ </bpel:copy>
+ </bpel:assign>
+ </bpel:sequence>
+
+ </bpel:otherwise>
+
+ </bpel:switch>
+
+ <bpel:reply name="response" partnerLink="LoanBrokerResponse"
+ portType="tns:LoanBroker" operation="getLoanQuote"
+ variable="response" />
+
+ </bpel:sequence>
+
+</bpel:process>
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.wsdl
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.wsdl?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.wsdl (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/resources/loanbroker/loanbroker.wsdl Mon Feb 20 03:52:58 2006
@@ -0,0 +1,95 @@
+<definitions targetNamespace="urn:logicblaze:soa:loanbroker"
+ xmlns:tns="urn:logicblaze:soa:loanbroker"
+ xmlns:typens="urn:logicblaze:soa:loanbroker:types"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
+
+ <import namespace="urn:logicblaze:soa:creditagency"
+ location="creditagency.wsdl" />
+
+ <import namespace="urn:logicblaze:soa:bank"
+ location="bank.wsdl" />
+
+ <!-- type defs -->
+ <types>
+ <xsd:schema
+ targetNamespace="urn:logicblaze:soa:loanbroker:types"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:complexType name="getLoanQuoteRequest">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ <xsd:element name="amount" type="xsd:double" />
+ <xsd:element name="duration" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="getLoanQuoteResponse">
+ <xsd:sequence>
+ <xsd:element name="rate" type="xsd:double" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="unknownSSNFault">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="invalidSSNFault">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ </xsd:schema>
+ </types>
+
+ <message name="getLoanQuoteRequest">
+ <part name="payload" type="typens:getLoanQuoteRequest" />
+ </message>
+
+ <message name="getLoanQuoteResponse">
+ <part name="payload" type="typens:getLoanQuoteResponse" />
+ </message>
+
+ <message name="unknownSSNFault">
+ <part name="payload" type="typens:unknownSSNFault" />
+ </message>
+
+ <message name="invalidSSNFault">
+ <part name="payload" type="typens:invalidSSNFault" />
+ </message>
+
+ <portType name="LoanBroker">
+ <operation name="getLoanQuote">
+ <input message="getLoanQuoteRequest" />
+ <output message="getLoanQuoteResponse" />
+ <fault name="UnknownSSN" message="tns:unknownSSNFault" />
+ <fault name="InvalidSSN" message="tns:invalidSSNFault" />
+ </operation>
+ </portType>
+
+ <!--
+ <plnk:partnerLinkType name="test1Request">
+ <plnk:role name="test1Service">
+ <plnk:portType name="test1PT"/>
+ </plnk:role>
+ </plnk:partnerLinkType>
+
+ <plnk:partnerLinkType name="probeRequest">
+ <plnk:role name="probeService">
+ <plnk:portType name="prb:probeMessagePT"/>
+ </plnk:role>
+ </plnk:partnerLinkType>
+ -->
+
+ <binding name="LoanBroker" type="tns:LoanBroker">
+ <operation name="request"></operation>
+ </binding>
+ <service name="LoanBrokerService">
+ <port name="loanbroker" binding="tns:LoanBroker" />
+ </service>
+</definitions>
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j-tests.properties
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j-tests.properties?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j-tests.properties (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j-tests.properties Mon Feb 20 03:52:58 2006
@@ -0,0 +1,21 @@
+#
+# The logging properties used during tests..
+#
+log4j.rootLogger=DEBUG, out
+
+log4j.logger.org.apache.activemq=INFO
+log4j.logger.org.apache.activemq.spring=WARN
+log4j.logger.org.apache.activemq.store.journal=INFO
+log4j.logger.org.activeio.journal=INFO
+
+# CONSOLE appender not used by default
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+# File appender
+log4j.appender.out=org.apache.log4j.FileAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+log4j.appender.out.file=target/servicemix-test.log
+log4j.appender.out.append=true
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j.properties?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j.properties (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/resources/log4j.properties Mon Feb 20 03:52:58 2006
@@ -0,0 +1,22 @@
+#
+# The logging properties used during tests..
+#
+log4j.rootLogger=DEBUG, stdout
+
+log4j.logger.javax.jbi=INFO
+log4j.logger.org.apache.activemq=INFO
+log4j.logger.org.apache.activemq.spring=WARN
+log4j.logger.org.apache.activemq.store.journal=INFO
+log4j.logger.org.activeio.journal=INFO
+
+# CONSOLE appender not used by default
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+# File appender
+log4j.appender.out=org.apache.log4j.FileAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+log4j.appender.out.file=target/servicemix-test.log
+log4j.appender.out.append=true
Added: incubator/servicemix/trunk/servicemix-bpe/src/test/resources/request.xml
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-bpe/src/test/resources/request.xml?rev=379109&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-bpe/src/test/resources/request.xml (added)
+++ incubator/servicemix/trunk/servicemix-bpe/src/test/resources/request.xml Mon Feb 20 03:52:58 2006
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:wsa="http://www.w3.org/2005/08/addressing"
+ xmlns:lb="urn:logicblaze:soa:loanbroker">
+ <e:Header>
+ <wsa:Action>
+ urn:logicblaze:soa:loanbroker:LoanBroker:getLoanQuote
+ </wsa:Action>
+ </e:Header>
+ <e:Body>
+ <lb:getLoanQuoteRequest>
+ <lb:ssn>1243</lb:ssn>
+ <lb:amount>1000.0</lb:amount>
+ <lb:duration>12</lb:duration>
+ </lb:getLoanQuoteRequest>
+ </e:Body>
+</e:Envelope>
\ No newline at end of file