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') &lt; 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