Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java?rev=406952&r1=406951&r2=406952&view=diff ============================================================================== --- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java (original) +++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java Tue May 16 07:15:40 2006 @@ -226,7 +226,7 @@ } else { if ( - SOAP12Constants.SOAP_DEFAULT_NAMESPACE_PREFIX.equals(faultCodeValue.getNamespaceURI()) && + SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(faultCodeValue.getNamespaceURI()) && (SOAP12Constants.FAULT_CODE_DATA_ENCODING_UNKNOWN.equals(faultCodeValue.getLocalPart()) || SOAP12Constants.FAULT_CODE_MUST_UNDERSTAND.equals(faultCodeValue.getLocalPart()) ||
Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java?rev=406952&r1=406951&r2=406952&view=diff ============================================================================== --- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java (original) +++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java Tue May 16 07:15:40 2006 @@ -11,6 +11,7 @@ import org.apache.synapse.SynapseException; import org.apache.synapse.MessageContext; import org.apache.synapse.mediators.AbstractMediator; +import org.apache.synapse.mediators.MediatorProperty; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jaxen.JaxenException; @@ -27,6 +28,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.List; +import java.util.ArrayList; /** * The transform mediator performs an XSLT or XQuery transformation requested, using @@ -41,6 +43,7 @@ private URL xsltUrl = null; private URL xQueryUrl = null; private AXIOMXPath source = null; + private List properties = new ArrayList(); /** * Transforms this message (or its element specified as the source) using the @@ -142,7 +145,7 @@ private void handleException(Exception e) { String msg = "Error performing XSLT/XQ transformation " + e.getMessage(); - log.error(msg); + log.error(msg, e); throw new SynapseException(msg, e); } @@ -168,6 +171,14 @@ public void setXQueryUrl(URL xQueryUrl) { this.xQueryUrl = xQueryUrl; + } + + public void addProperty(MediatorProperty p) { + properties.add(p); + } + + public void addAllProperties(List list) { + properties.addAll(list); } } Added: incubator/synapse/trunk/java/modules/core/test-resources/misc/validate2.xsd URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/test-resources/misc/validate2.xsd?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/modules/core/test-resources/misc/validate2.xsd (added) +++ incubator/synapse/trunk/java/modules/core/test-resources/misc/validate2.xsd Tue May 16 07:15:40 2006 @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:m1="http://www.apache-synapse.org/test" xmlns:m2="http://www.apache-synapse.org/test2" targetNamespace="http://www.apache-synapse.org/test2" elementFormDefault="qualified" attributeFormDefault="unqualified"> + <xs:import namespace="http://www.apache-synapse.org/test" schemaLocation="validate.xsd"/> + + <xs:element name="CheckPriceRequest2"> + <xs:complexType> + <xs:sequence> + <xs:element name="Code2" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="Outer"> + <xs:complexType> + <xs:sequence> + <xs:element ref="m1:CheckPriceRequest"/> + <xs:element ref="m2:CheckPriceRequest2"/> + </xs:sequence> + </xs:complexType> + </xs:element> +</xs:schema> Modified: incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/TestMessageContext.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/TestMessageContext.java?rev=406952&r1=406951&r2=406952&view=diff ============================================================================== --- incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/TestMessageContext.java (original) +++ incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/TestMessageContext.java Tue May 16 07:15:40 2006 @@ -26,6 +26,8 @@ import java.util.Map; import java.util.HashMap; +import java.util.Iterator; +import java.util.Set; public class TestMessageContext implements MessageContext { @@ -65,6 +67,10 @@ public void setProperty(String key, Object value) { properties.put(key, value); + } + + public Set getPropertyKeySet() { + return properties.keySet(); } //--------- Modified: incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/builtin/ValidateMediatorTest.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/builtin/ValidateMediatorTest.java?rev=406952&r1=406951&r2=406952&view=diff ============================================================================== --- incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/builtin/ValidateMediatorTest.java (original) +++ incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/builtin/ValidateMediatorTest.java Tue May 16 07:15:40 2006 @@ -24,6 +24,26 @@ public class ValidateMediatorTest extends TestCase { + private static final String VALID_ENVELOPE_TWO_SCHEMAS = + "<Outer xmlns=\"http://www.apache-synapse.org/test2\">" + + "<m0:CheckPriceRequest xmlns:m0=\"http://www.apache-synapse.org/test\">\n" + + "<m0:Code>String</m0:Code>\n" + + "</m0:CheckPriceRequest>\n" + + "<m1:CheckPriceRequest2 xmlns:m1=\"http://www.apache-synapse.org/test2\">\n" + + "<m1:Code2>String</m1:Code2>\n" + + "</m1:CheckPriceRequest2>\n" + + "</Outer>"; + + private static final String INVALID_ENVELOPE_TWO_SCHEMAS = + "<Outer xmlns=\"http://www.apache-synapse.org/test2\">" + + "<m1:CheckPriceRequest2 xmlns:m1=\"http://www.apache-synapse.org/test2\">\n" + + "<m1:Code2>String</m1:Code2>\n" + + "</m1:CheckPriceRequest2>\n" + + "<m0:CheckPriceRequest xmlns:m0=\"http://www.apache-synapse.org/test\">\n" + + "<m0:Code>String</m0:Code>\n" + + "</m0:CheckPriceRequest>\n" + + "</Outer>"; + private static final String VALID_ENVELOPE = "<m0:CheckPriceRequest xmlns:m0=\"http://www.apache-synapse.org/test\">\n" + "\t<m0:Code>String</m0:Code>\n" + @@ -80,6 +100,48 @@ validate.mediate(TestUtils.getTestContext(VALID_ENVELOPE)); assertTrue(!onFailInvoked); + } + + public void testValidateMedaitorValidCaseTwoSchemas() throws Exception { + setOnFailInvoked(false); + + // create a validate mediator + ValidateMediator validate = new ValidateMediator(); + + // set the schema url, source xpath and any name spaces + validate.setSchemaUrl("test-resources/misc/validate.xsd test-resources/misc/validate2.xsd"); + AXIOMXPath source = new AXIOMXPath("//m0:Outer"); + source.addNamespace("m0", "http://www.apache-synapse.org/test2"); + validate.setSource(source); + + // set dummy mediator to be called on fail + validate.addChild(testMediator); + + // test validate mediator, with static enveope + validate.mediate(TestUtils.getTestContext(VALID_ENVELOPE_TWO_SCHEMAS)); + + assertTrue(!onFailInvoked); + } + + public void testValidateMedaitorInvalidCaseTwoSchemas() throws Exception { + setOnFailInvoked(false); + + // create a validate mediator + ValidateMediator validate = new ValidateMediator(); + + // set the schema url, source xpath and any name spaces + validate.setSchemaUrl("test-resources/misc/validate.xsd test-resources/misc/validate2.xsd"); + AXIOMXPath source = new AXIOMXPath("//m0:Outer"); + source.addNamespace("m0", "http://www.apache-synapse.org/test2"); + validate.setSource(source); + + // set dummy mediator to be called on fail + validate.addChild(testMediator); + + // test validate mediator, with static enveope + validate.mediate(TestUtils.getTestContext(INVALID_ENVELOPE_TWO_SCHEMAS)); + + assertTrue(onFailInvoked); } public void testValidateMedaitorInvalidCase() throws Exception { Added: incubator/synapse/trunk/java/modules/samples/src/samples/mediation/AdvancedQuoteClient.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/samples/src/samples/mediation/AdvancedQuoteClient.java?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/modules/samples/src/samples/mediation/AdvancedQuoteClient.java (added) +++ incubator/synapse/trunk/java/modules/samples/src/samples/mediation/AdvancedQuoteClient.java Tue May 16 07:15:40 2006 @@ -0,0 +1,102 @@ +/* +* Copyright 2004,2005 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 samples.mediation; + +import org.apache.axiom.om.OMElement; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.context.MessageContextConstants; +import org.apache.axis2.AxisFault; + +public class AdvancedQuoteClient { + + public static void main(String[] args) { + + String symbol = "MSFT"; + String xurl = "http://ws.invesbot.com/stockquotes.asmx"; + String turl = "http://localhost:8080/StockQuote"; + + testStandardQuote(symbol, xurl, turl); + testAdvancedQuote(symbol, xurl, turl); + testErroneousQuote(symbol, xurl, turl); + } + + private static void testAdvancedQuote(String symbol, String xurl, String turl) { + try { + OMElement getQuote = CustomQuoteXMLHandler.createCustomRequestPayload(symbol); + + Options options = new Options(); + options.setTo(new EndpointReference(xurl)); + options.setProperty(MessageContextConstants.TRANSPORT_URL, turl); + options.setAction("http://ws.invesbot.com/GetQuote"); + + ServiceClient serviceClient = new ServiceClient(); + serviceClient.setOptions(options); + + OMElement result = serviceClient.sendReceive(getQuote); + System.out.println("Custom :: Stock price = $" + CustomQuoteXMLHandler.parseCustomResponsePayload(result.getFirstElement())); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void testErroneousQuote(String symbol, String xurl, String turl) { + try { + OMElement getQuote = CustomQuoteXMLHandler.createErroneousRequestPayload(symbol); + + Options options = new Options(); + options.setTo(new EndpointReference(xurl)); + options.setProperty(MessageContextConstants.TRANSPORT_URL, turl); + options.setAction("http://ws.invesbot.com/GetQuote"); + + ServiceClient serviceClient = new ServiceClient(); + serviceClient.setOptions(options); + + OMElement result = serviceClient.sendReceive(getQuote); + System.out.println("Error :: Stock price = $" + CustomQuoteXMLHandler.parseCustomResponsePayload(result.getFirstElement())); + + } catch (Exception e) { + if (e instanceof AxisFault) { + System.out.println("Fault : " + ((AxisFault)e).getFaultElements()); + } else { + e.printStackTrace(); + } + } + } + + private static void testStandardQuote(String symbol, String xurl, String turl) { + try { + OMElement getQuote = CustomQuoteXMLHandler.createStandardRequestPayload(symbol); + + Options options = new Options(); + options.setTo(new EndpointReference(xurl)); + options.setProperty(MessageContextConstants.TRANSPORT_URL, turl); + options.setAction("http://ws.invesbot.com/GetQuote"); + + ServiceClient serviceClient = new ServiceClient(); + serviceClient.setOptions(options); + + OMElement result = serviceClient.sendReceive(getQuote).getFirstElement(); + System.out.println("Standard :: Stock price = $" + CustomQuoteXMLHandler.parseStandardResponsePayload(result)); + + } catch (Exception e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file Added: incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomQuoteXMLHandler.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomQuoteXMLHandler.java?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomQuoteXMLHandler.java (added) +++ incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomQuoteXMLHandler.java Tue May 16 07:15:40 2006 @@ -0,0 +1,135 @@ +/* +* Copyright 2004,2005 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 samples.mediation; + +import org.apache.axiom.om.*; + +import javax.xml.stream.XMLStreamException; +import javax.xml.namespace.QName; + +public class CustomQuoteXMLHandler { + + /** + * Create a new custom stock quote request with a body as follows + * <m0:CheckPriceRequest xmlns:m0="http://www.apache-synapse.org/test"> + * <m0:Code>symbol</m0:Code> + * </m0:CheckPriceRequest> + * @param symbol the stock symbol + * @return OMElement for SOAP body + */ + public static OMElement createCustomRequestPayload(String symbol) { + OMFactory factory = OMAbstractFactory.getOMFactory(); + OMNamespace ns = factory.createOMNamespace("http://www.apache-synapse.org/test", "m0"); + OMElement chkPrice = factory.createOMElement("CheckPriceRequest", ns); + OMElement code = factory.createOMElement("Code", ns); + chkPrice.addChild(code); + code.setText(symbol); + return chkPrice; + } + + /** + * Create a new erroneous custom stock quote request with a body as follows + * <m0:CheckPriceRequest xmlns:m0="http://www.apache-synapse.org/test"> + * <m0:Symbol>symbol</m0:Symbol> + * </m0:CheckPriceRequest> + * @param symbol the stock symbol + * @return OMElement for SOAP body + */ + public static OMElement createErroneousRequestPayload(String symbol) { + OMFactory factory = OMAbstractFactory.getOMFactory(); + OMNamespace ns = factory.createOMNamespace("http://www.apache-synapse.org/test", "m0"); + OMElement chkPrice = factory.createOMElement("CheckPriceRequest", ns); + OMElement code = factory.createOMElement("Symbol", ns); + chkPrice.addChild(code); + code.setText(symbol); + return chkPrice; + } + + /** + * Create a new custom stock quote request with a body as follows + <m:GetQuote xmlns:m="http://www.webserviceX.NET/"> + <m:symbol>IBM</m:symbol> + </m:GetQuote> + * @param symbol the stock symbol + * @return OMElement for SOAP body + */ + public static OMElement createStandardRequestPayload(String symbol) { + OMFactory factory = OMAbstractFactory.getOMFactory(); + OMNamespace ns = factory.createOMNamespace("http://ws.invesbot.com/", "m0"); + OMElement getQuote = factory.createOMElement("GetQuote", ns); + OMElement symb = factory.createOMElement("symbol", ns); + getQuote.addChild(symb); + symb.setText(symbol); + return getQuote; + } + + /** + * Digests the standard StockQuote response and extracts the last trade price + * @param result + * @return + * @throws XMLStreamException + * + <GetQuoteResponse xmlns="http://ws.invesbot.com/"> + <GetQuoteResult> + <StockQuote xmlns=""> + <Symbol>IBM</Symbol> + ... + <Price>82.47</Price> + ....... + </StockQuote> + </GetQuoteResult> + </GetQuoteResponse> + */ + public static String parseStandardResponsePayload(OMElement result) throws Exception { + + OMElement getQResp = result.getFirstChildWithName( + new QName("http://ws.invesbot.com/", "StockQuote")); + if (getQResp != null) { + OMElement price = getQResp.getFirstChildWithName( + new QName("http://ws.invesbot.com/", "Price")); + return price.getText(); + } else { + throw new Exception("Unexpected response : " + result); + } + } + + /** + * Digests the custom quote response and extracts the last trade price + * @param result + * @return + * @throws XMLStreamException + * + <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> + <soap:Body> + <CheckPriceResponse xmlns="http://ws.invesbot.com/" > + <Code>IBM</Code> + <Price>82.90</Price> + </CheckPriceResponse> + </soap:Body> + </soap:Envelope> + */ + public static String parseCustomResponsePayload(OMElement result) throws Exception { + + OMElement chkPResp = result.getFirstChildWithName( + new QName("http://www.apache-synapse.org/test", "CheckPriceResponse")); + if (chkPResp != null) { + OMElement price = chkPResp.getFirstChildWithName(new QName("http://www.apache-synapse.org/test", "Price")); + return price.getText(); + } else { + throw new Exception("Unexpected response : " + result); + } + } +} \ No newline at end of file Added: incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomStockQuoteClient.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomStockQuoteClient.java?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomStockQuoteClient.java (added) +++ incubator/synapse/trunk/java/modules/samples/src/samples/mediation/CustomStockQuoteClient.java Tue May 16 07:15:40 2006 @@ -0,0 +1,76 @@ +/* +* Copyright 2004,2005 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 samples.mediation; + +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; +import org.apache.axis2.context.MessageContextConstants; +import org.apache.axiom.om.OMElement; + +public class CustomStockQuoteClient { + + public static void main(String[] args) { + + String symbol = "IBM"; + String xurl = "http://ws.invesbot.com/stockquotes.asmx"; + String turl = "http://localhost:8080/StockQuote"; + + testStandardQuote(symbol, xurl, turl); + testCustomQuote(symbol, xurl, turl); + } + + private static void testCustomQuote(String symbol, String xurl, String turl) { + try { + OMElement getQuote = CustomQuoteXMLHandler.createCustomRequestPayload(symbol); + + Options options = new Options(); + options.setTo(new EndpointReference(xurl)); + options.setProperty(MessageContextConstants.TRANSPORT_URL, turl); + options.setAction("http://ws.invesbot.com/GetQuote"); + + ServiceClient serviceClient = new ServiceClient(); + serviceClient.setOptions(options); + + OMElement result = serviceClient.sendReceive(getQuote).getFirstElement(); + System.out.println("Custom :: Stock price = $" + CustomQuoteXMLHandler.parseCustomResponsePayload(result)); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void testStandardQuote(String symbol, String xurl, String turl) { + try { + OMElement getQuote = CustomQuoteXMLHandler.createStandardRequestPayload(symbol); + + Options options = new Options(); + options.setTo(new EndpointReference(xurl)); + options.setProperty(MessageContextConstants.TRANSPORT_URL, turl); + options.setAction("http://ws.invesbot.com/GetQuote"); + + ServiceClient serviceClient = new ServiceClient(); + serviceClient.setOptions(options); + + OMElement result = serviceClient.sendReceive(getQuote).getFirstElement(); + System.out.println("Standard :: Stock price = $" + CustomQuoteXMLHandler.parseStandardResponsePayload(result)); + + } catch (Exception e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file Modified: incubator/synapse/trunk/java/repository/conf/axis2.xml URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/axis2.xml?rev=406952&r1=406951&r2=406952&view=diff ============================================================================== --- incubator/synapse/trunk/java/repository/conf/axis2.xml (original) +++ incubator/synapse/trunk/java/repository/conf/axis2.xml Tue May 16 07:15:40 2006 @@ -12,12 +12,16 @@ <!-- Location of the SynapseRepository --> - <parameter name="SynapseConfiguration" locked="false">conf/synapse.xml</parameter> + <parameter name="SynapseConfiguration" locked="false">./../synapse_repository/conf/synapse.xml</parameter> <parameter name="userName" locked="false">admin</parameter> <parameter name="password" locked="false">axis2</parameter> + <!-- Always engage addressing for Synapse --> <module ref="addressing"/> + <!-- This interceptor initializes Synapse on Axis2 startup --> + <listener class="org.apache.synapse.core.axis2.SynapseAxis2Interceptor"/> + <!-- ================================================= --> <!-- Message Receivers --> Added: incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_0.xml URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_0.xml?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_0.xml (added) +++ incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_0.xml Tue May 16 07:15:40 2006 @@ -0,0 +1,39 @@ +<synapse xmlns="http://ws.apache.org/ns/synapse"> + + <definitions> + + <sequence name="stockquote"> + <!-- set the To address to the real endpoint --> + <header name="To" value="http://www.webservicex.net/stockquote.asmx"/> + + <!-- check if the symbol is MSFT --> + <filter xpath="//*[wsx:symbol='MSFT']" xmlns:wsx="http://www.webserviceX.NET/"> + <!-- if it is throw a fault --> + <makefault> + <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/> + <reason value="Isn't there a Windows API for that?"/> + </makefault> + </filter> + </sequence> + + </definitions> + + <rules> + <!-- now log the message using log4j --> + <log level="full"/> + + <!-- Check if the URL matches the stockquote gateway/dumb case --> + <filter source="get-property('To')" regex=".*/StockQuote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- check if the URL matches the virtual url - either the proxy or ws-add case --> + <filter source="get-property('To')" regex="http://stockquote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- send the message on --> + <send/> + </rules> + +</synapse> \ No newline at end of file Added: incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_1.xml URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_1.xml?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_1.xml (added) +++ incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_1.xml Tue May 16 07:15:40 2006 @@ -0,0 +1,87 @@ +<synapse xmlns="http://ws.apache.org/ns/synapse"> + + <definitions> + + <sequence name="customrequest"> + <!-- set the To address to the real endpoint --> + <header name="To" value="http://ws.invesbot.com/stockquotes.asmx"/> + + <!-- set correlation field to custom label --> + <set-property name="correlate/label" value="customquote"/> + + <!-- transform the custom quote into a standard quote requst --> + <transform xslt="file:../synapse_repository/conf/sample/transform.xslt"/> + + <!-- send message to real endpoint and stop --> + <send/> + <drop/> + </sequence> + + <sequence name="customresponse"> + <!-- transform the custom quote into a standard quote requst --> + <transform xslt="file:../synapse_repository/conf/sample/transform_back.xslt"/> + + <!-- now send the custom response back to the client and stop --> + <send/> + <drop/> + </sequence> + + <sequence name="stockquote"> + <!-- set the To address to the real endpoint --> + <header name="To" value="http://ws.invesbot.com/stockquotes.asmx"/> + + <!-- check if the symbol is MSFT --> + <filter xpath="//*[wsx:symbol='MSFT']" xmlns:wsx="http://www.webserviceX.NET/"> + <!-- if it is throw a fault --> + <makefault> + <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/> + <reason value="Isn't there a Windows API for that?"/> + </makefault> + </filter> + + <send/> + </sequence> + + <sequence name="standardrequest"> + <!-- now log the message using log4j --> + <log level="full"/> + + <!-- Check if the URL matches the stockquote gateway/dumb case --> + <filter source="get-property('To')" regex=".*/StockQuote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- check if the URL matches the virtual url - either the proxy or ws-add case --> + <filter source="get-property('To')" regex="http://stockquote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- send the message on --> + <send/> + </sequence> + + </definitions> + + <rules> + <in> + <!-- is this a custom stock quote message? --> + <filter xpath="//m0:CheckPriceRequest" xmlns:m0="http://www.apache-synapse.org/test"> + <sequence ref="customrequest"/> + </filter> + + <!-- else, proceed as usual with the standard processing rules --> + <sequence ref="standardrequest"/> + </in> + + <out> + <!-- is this a custom stock quote reply? --> + <filter source="synapse:get-property('correlate/label')" regex="customquote"> + <sequence ref="customresponse"/> + </filter> + + <!-- just let the message flow through --> + <send/> + </out> + </rules> + +</synapse> \ No newline at end of file Added: incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_2.xml URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_2.xml?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_2.xml (added) +++ incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_2.xml Tue May 16 07:15:40 2006 @@ -0,0 +1,128 @@ +<synapse xmlns="http://ws.apache.org/ns/synapse"> + + <definitions> + + <!-- define global properties --> + <set-property name="version" value="0.1"/> + + <!-- define a reuseable endpoint definition and use it within config --> + <endpoint name="invesbot" address="http://ws.invesbot.com/stockquotes.asmx"/> + + <sequence name="customrequest"> + <!-- is this a valid custom request ? --> + <validate schema="file:../synapse_repository/conf/sample/validate.xsd"> + <on-fail> + <!-- if the request does not validate againt schema throw a fault --> + <makefault> + <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/> + <reason value="Invalid custom quote request"/> + </makefault> + + <!-- send the fault and stop processing --> + <send/> + <drop/> + </on-fail> + </validate> + + <switch source="//m0:CheckPriceRequest/m0:Code" xmlns:m0="http://www.apache-synapse.org/test"> + <case regex="IBM"> + <set-property name="symbol" value="Great stock - IBM"/> + </case> + <case regex="MSFT"> + <set-property name="symbol" value="Are you sure? - MSFT"/> + </case> + <default> + <set-property name="symbol" expression="fn:concat('Normal Stock - ', //m0:CheckPriceRequest/m0:Code)" xmlns:m0="http://www.apache-synapse.org/test"/> + </default> + </switch> + + <!-- set a dynamic (local) message property --> + + + <!-- set correlation field to custom label --> + <set-property name="correlate/label" value="customquote"/> + + <!-- transform the custom quote into a standard quote requst --> + <transform xslt="file:../synapse_repository/conf/sample/transform.xslt"/> + + <log level="custom"> + <property name="Text" value="Sending quote request"/> + <property name="version" expression="synapse:get-property('version')"/> + <property name="symbol" expression="synapse:get-property('symbol')"/> + </log> + + <!-- send message to real endpoint referenced by name "invesbot" and stop --> + <send> + <endpoint ref="invesbot"/> + </send> + <drop/> + </sequence> + + <sequence name="customresponse"> + <!-- transform the custom quote into a standard quote requst --> + <transform xslt="file:../synapse_repository/conf/sample/transform_back.xslt"/> + + <!-- now send the custom response back to the client and stop --> + <send/> + <drop/> + </sequence> + + <sequence name="stockquote"> + <!-- set the To address to the real endpoint --> + <header name="To" value="http://ws.invesbot.com/stockquotes.asmx"/> + + <!-- check if the symbol is MSFT --> + <filter xpath="//*[wsx:symbol='MSFT']" xmlns:wsx="http://www.webserviceX.NET/"> + <!-- if it is throw a fault --> + <makefault> + <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/> + <reason value="Isn't there a Windows API for that?"/> + </makefault> + </filter> + + <send/> + </sequence> + + <sequence name="standardrequest"> + <!-- now log the message using log4j --> + <log level="full"/> + + <!-- Check if the URL matches the stockquote gateway/dumb case --> + <filter source="get-property('To')" regex=".*/StockQuote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- check if the URL matches the virtual url - either the proxy or ws-add case --> + <filter source="get-property('To')" regex="http://stockquote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- send the message on --> + <send/> + </sequence> + + </definitions> + + <rules> + <in> + <!-- is this a custom stock quote message? --> + <filter xpath="//m0:CheckPriceRequest" xmlns:m0="http://www.apache-synapse.org/test"> + <sequence ref="customrequest"/> + </filter> + + <!-- else, proceed as usual with the standard processing rules --> + <sequence ref="standardrequest"/> + </in> + + <out> + <!-- is this a custom stock quote reply? --> + <filter source="synapse:get-property('correlate/label')" regex="customquote"> + <sequence ref="customresponse"/> + </filter> + + <!-- just let the message flow through --> + <send/> + </out> + </rules> + +</synapse> \ No newline at end of file Added: incubator/synapse/trunk/java/repository/conf/sample/transform.xslt URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/sample/transform.xslt?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/repository/conf/sample/transform.xslt (added) +++ incubator/synapse/trunk/java/repository/conf/sample/transform.xslt Tue May 16 07:15:40 2006 @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xsl:stylesheet version="2.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fn="http://www.w3.org/2005/02/xpath-functions" + xmlns:m0="http://www.apache-synapse.org/test" + exclude-result-prefixes="m0 fn"> +<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/> + +<xsl:template match="/"> + <xsl:apply-templates select="//m0:CheckPriceRequest" /> +</xsl:template> + +<xsl:template match="m0:CheckPriceRequest"> + +<m:GetQuote xmlns:m="http://ws.invesbot.com/"> + <m:symbol><xsl:value-of select="m0:Code"/></m:symbol> +</m:GetQuote> + +</xsl:template> +</xsl:stylesheet> \ No newline at end of file Added: incubator/synapse/trunk/java/repository/conf/sample/transform_back.xslt URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/sample/transform_back.xslt?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/repository/conf/sample/transform_back.xslt (added) +++ incubator/synapse/trunk/java/repository/conf/sample/transform_back.xslt Tue May 16 07:15:40 2006 @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xsl:stylesheet version="2.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fn="http://www.w3.org/2005/02/xpath-functions" + xmlns:m0="http://ws.invesbot.com/" + exclude-result-prefixes="m0 fn"> +<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/> + +<xsl:template match="/"> + <xsl:apply-templates select="//m0:StockQuote" /> +</xsl:template> + +<xsl:template match="m0:StockQuote"> + +<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> +<soap:Body> +<m:CheckPriceResponse xmlns:m="http://www.apache-synapse.org/test"> + <m:Code><xsl:value-of select="m0:Symbol"/></m:Code> + <m:Price><xsl:value-of select="m0:Price"/></m:Price> +</m:CheckPriceResponse> +</soap:Body> +</soap:Envelope> + +</xsl:template> +</xsl:stylesheet> \ No newline at end of file Added: incubator/synapse/trunk/java/repository/conf/sample/validate.xsd URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/sample/validate.xsd?rev=406952&view=auto ============================================================================== --- incubator/synapse/trunk/java/repository/conf/sample/validate.xsd (added) +++ incubator/synapse/trunk/java/repository/conf/sample/validate.xsd Tue May 16 07:15:40 2006 @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.apache-synapse.org/test" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://www.apache-synapse.org/test"> + <xs:element name="CheckPriceRequest"> + <xs:complexType> + <xs:sequence> + <xs:element name="Code" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +</xs:schema> \ No newline at end of file Modified: incubator/synapse/trunk/java/repository/conf/synapse.xml URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/repository/conf/synapse.xml?rev=406952&r1=406951&r2=406952&view=diff ============================================================================== --- incubator/synapse/trunk/java/repository/conf/synapse.xml (original) +++ incubator/synapse/trunk/java/repository/conf/synapse.xml Tue May 16 07:15:40 2006 @@ -1,41 +1,39 @@ - <synapse xmlns="http://ws.apache.org/ns/synapse"> - <definitions> - <sequence name="registration_flow"> - <filter xpath="//[EMAIL PROTECTED]'GOLD']"> - <log level="full"> - <property name="category" value="GOLD"/> - </log> - <drop/> - </filter> - <sequence ref="fault_flow"/> - </sequence> +<synapse xmlns="http://ws.apache.org/ns/synapse"> - <sequence name="fault_flow"> - <log level="full"> - <property name="application" value="Hello World"/> - </log> - <drop/> - </sequence> - - <sequence name="stockquote"> - <log level="full"> - <property name="application" value="StockQuote"/> - </log> - <filter xpath="//*[wsx:symbol='MSFT']" xmlns:wsx="http://www.webserviceX.NET/"> - <makefault> - <reason>Sorry the requested stock is no longer available</reason> - </makefault> - </filter> - <header name="to" value="http://www.webservicex.net/stockquote.asmx"/> - </sequence> - - </definitions> - - <rules> - <filter source="//wsa:To" regex=".*/StockQuote.*" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"> - <sequence ref="stockquote"/> - </filter> - <send/> - </rules> - - </synapse> \ No newline at end of file + <definitions> + + <sequence name="stockquote"> + <!-- set the To address to the real endpoint --> + <header name="To" value="http://www.webservicex.net/stockquote.asmx"/> + + <!-- check if the symbol is MSFT --> + <filter xpath="//*[wsx:symbol='MSFT']" xmlns:wsx="http://www.webserviceX.NET/"> + <!-- if it is throw a fault --> + <makefault> + <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/> + <reason value="Isn't there a Windows API for that?"/> + </makefault> + </filter> + </sequence> + + </definitions> + + <rules> + <!-- now log the message using log4j --> + <log level="full"/> + + <!-- Check if the URL matches the stockquote gateway/dumb case --> + <filter source="get-property('To')" regex=".*/StockQuote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- check if the URL matches the virtual url - either the proxy or ws-add case --> + <filter source="get-property('To')" regex="http://stockquote.*"> + <sequence ref="stockquote"/> + </filter> + + <!-- send the message on --> + <send/> + </rules> + +</synapse> \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
