You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2011/01/20 06:17:50 UTC
svn commit: r1061125 -
/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
Author: supun
Date: Thu Jan 20 05:17:49 2011
New Revision: 1061125
URL: http://svn.apache.org/viewvc?rev=1061125&view=rev
Log:
adding XSLT mediator transformation test
Modified:
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java?rev=1061125&r1=1061124&r2=1061125&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java Thu Jan 20 05:17:49 2011
@@ -19,36 +19,26 @@
package org.apache.synapse.mediators.transform;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerFactory;
-
import junit.framework.TestCase;
import junit.framework.TestSuite;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.om.OMContainer;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.*;
+import org.apache.axis2.transport.base.BaseConstants;
import org.apache.synapse.MessageContext;
import org.apache.synapse.SynapseException;
import org.apache.synapse.TestMessageContextBuilder;
-import org.apache.synapse.util.jaxp.AXIOMResultBuilderFactory;
-import org.apache.synapse.util.jaxp.AXIOMSourceBuilderFactory;
-import org.apache.synapse.util.jaxp.DOOMResultBuilderFactory;
-import org.apache.synapse.util.jaxp.DOOMSourceBuilderFactory;
-import org.apache.synapse.util.jaxp.StreamResultBuilderFactory;
-import org.apache.synapse.util.jaxp.StreamSourceBuilderFactory;
+import org.apache.synapse.mediators.Key;
+import org.apache.synapse.util.jaxp.*;
import org.apache.synapse.util.xpath.SynapseXPath;
-import org.apache.axis2.transport.base.BaseConstants;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerFactory;
public class XSLTMediatorTest extends TestCase {
private static final Class[] sourceBuilderFactories = {
DOOMSourceBuilderFactory.class,
StreamSourceBuilderFactory.class,
AXIOMSourceBuilderFactory.class };
-
+
private static final Class[] resultBuilderFactories = {
DOOMResultBuilderFactory.class,
StreamResultBuilderFactory.class,
@@ -64,6 +54,21 @@ public class XSLTMediatorTest extends Te
SOURCE +
"</m:someOtherElement>";
+ private static final String SOURCE_DYNAMIC_KEY1 =
+ "<m0:CheckPriceRequest xmlns:m0=\"http://services.samples/xsd\">\n" +
+ "<m0:DynamicXsltKey1>DynamicXsltKey1</m0:DynamicXsltKey1>\n" +
+ "</m0:CheckPriceRequest>\n" ;
+
+ private static final String SOURCE_DYNAMIC_KEY2 =
+ "<m0:CheckPriceRequest xmlns:m0=\"http://services.samples/xsd\">\n" +
+ "<m0:DynamicXsltKey2>DynamicXsltKey2</m0:DynamicXsltKey2>\n" +
+ "</m0:CheckPriceRequest>\n" ;
+
+ private static final String SOURCE_STATIC_KEY =
+ "<m0:CheckPriceRequest xmlns:m0=\"http://services.samples/xsd\">\n" +
+ "<m0:StaticXsltKey>StaticXsltKey</m0:StaticXsltKey>\n" +
+ "</m0:CheckPriceRequest>\n" ;
+
// Create the test cases for the various transformer factories, source builders and
// result builders dynamically:
public static TestSuite suite() {
@@ -72,10 +77,10 @@ public class XSLTMediatorTest extends Te
addGenericTests(suite, "Saxon", net.sf.saxon.TransformerFactoryImpl.class);
return suite;
}
-
+
private static void addGenericTests(TestSuite suite, final String processorName,
final Class<? extends TransformerFactory> transformerFactoryClass) {
-
+
for (final Class sbf : sourceBuilderFactories) {
for (final Class rbf : resultBuilderFactories) {
String testName = "test" + processorName + shortName(sbf) + shortName(rbf);
@@ -94,7 +99,7 @@ public class XSLTMediatorTest extends Te
}
}
}
-
+
private static String shortName(Class clazz) {
String name = clazz.getName();
name = name.substring(name.lastIndexOf('.')+1);
@@ -107,13 +112,13 @@ public class XSLTMediatorTest extends Te
/**
* Check that the provided element is the result of the XSL transformation of
* SOURCE by the stylesheet transform_unittest.xslt.
- *
+ *
* @param node result of the XSLT to be matched
*/
private void assertQuoteElement(OMNode node) {
assertTrue(node instanceof OMElement);
OMElement element = (OMElement)node;
-
+
assertTrue("GetQuote".equals(element.getLocalName()));
assertTrue("http://www.webserviceX.NET/".equals(element.getNamespace().getNamespaceURI()));
@@ -124,7 +129,7 @@ public class XSLTMediatorTest extends Te
assertTrue("String".equals(symbolElem.getText()));
}
-
+
public void testTransformXSLTCustomSource() throws Exception {
// create a new XSLT mediator
@@ -136,7 +141,7 @@ public class XSLTMediatorTest extends Te
transformMediator.setSource(xpath);
// set XSLT transformation URL
- transformMediator.setXsltKey("xslt-key");
+ setXsltTransformationURL(transformMediator, "xslt-key");
MessageContext synCtx = new TestMessageContextBuilder().addFileEntry("xslt-key",
"../../repository/conf/sample/resources/transform/transform_unittest.xslt")
@@ -157,7 +162,7 @@ public class XSLTMediatorTest extends Te
XSLTMediator transformMediator = new XSLTMediator();
// set XSLT transformation URL
- transformMediator.setXsltKey("xslt-key");
+ setXsltTransformationURL(transformMediator, "xslt-key");
MessageContext synCtx = new TestMessageContextBuilder().addFileEntry("xslt-key",
"../../repository/conf/sample/resources/transform/transform_unittest.xslt")
@@ -173,7 +178,7 @@ public class XSLTMediatorTest extends Te
// create a new switch mediator
XSLTMediator transformMediator = new XSLTMediator();
// set XSLT transformation URL
- transformMediator.setXsltKey("xslt-key");
+ setXsltTransformationURL(transformMediator, "xslt-key");
for (int i=0; i<2; i++) {
@@ -195,8 +200,7 @@ public class XSLTMediatorTest extends Te
// create a new switch mediator
XSLTMediator transformMediator = new XSLTMediator();
// set XSLT transformation URL
- transformMediator.setXsltKey("xslt-key");
-
+ setXsltTransformationURL(transformMediator, "xslt-key");
for (int i=0; i<2; i++) {
// invoke transformation, with static enveope
@@ -216,7 +220,7 @@ public class XSLTMediatorTest extends Te
// create a new switch mediator
XSLTMediator transformMediator = new XSLTMediator();
// set XSLT transformation URL
- transformMediator.setXsltKey("xslt-key");
+ setXsltTransformationURL(transformMediator, "xslt-key");
// invoke transformation, with static enveope
MessageContext synCtx = new TestMessageContextBuilder().addFileEntry("xslt-key",
@@ -228,7 +232,7 @@ public class XSLTMediatorTest extends Te
// validate result
OMContainer body = synCtx.getEnvelope().getBody();
assertTrue(body.getFirstOMChild().getNextOMSibling() instanceof OMElement);
- assertTrue( ((OMElement)body.getFirstOMChild().getNextOMSibling()).getText().length() > 0);
+ assertTrue(((OMElement) body.getFirstOMChild().getNextOMSibling()).getText().length() > 0);
}
@@ -237,7 +241,7 @@ public class XSLTMediatorTest extends Te
// create a new switch mediator
XSLTMediator transformMediator = new XSLTMediator();
// set XSLT transformation URL
- transformMediator.setXsltKey("xslt-key");
+ setXsltTransformationURL(transformMediator, "xslt-key");
for (int i=0; i<5; i++) {
// invoke transformation, with static enveope
@@ -262,7 +266,7 @@ public class XSLTMediatorTest extends Te
transformMediator.setSource(xpath);
// set XSLT transformation URL
- transformMediator.setXsltKey("xslt-key");
+ setXsltTransformationURL(transformMediator, "xslt-key");
// invoke transformation, with static enveope
MessageContext synCtx = new TestMessageContextBuilder().addFileEntry("xslt-key",
@@ -287,15 +291,15 @@ public class XSLTMediatorTest extends Te
public void testTextEncoding() throws Exception {
XSLTMediator transformMediator = new XSLTMediator();
- transformMediator.setXsltKey("xslt-key");
-
+ setXsltTransformationURL(transformMediator, "xslt-key");
+
MessageContext mc = new TestMessageContextBuilder().addFileEntry("xslt-key",
"../../repository/conf/sample/resources/transform/encoding_test.xslt")
.setEnvelopeFromFile("../../repository/conf/sample/resources/transform" +
"/encoding_test.xml").build();
-
+
transformMediator.mediate(mc);
-
+
OMElement resultElement = mc.getEnvelope().getBody().getFirstElement();
assertEquals(BaseConstants.DEFAULT_TEXT_WRAPPER, resultElement.getQName());
assertEquals("\u00e0 peine arriv\u00e9s nous entr\u00e2mes dans sa chambre",
@@ -305,13 +309,12 @@ public class XSLTMediatorTest extends Te
// Test for SYNAPSE-307
public void testInvalidStylesheet() throws Exception {
XSLTMediator transformMediator = new XSLTMediator();
- transformMediator.setXsltKey("xslt-key");
-
+ setXsltTransformationURL(transformMediator, "xslt-key");
MessageContext mc = new TestMessageContextBuilder()
.addEntry("xslt-key", getClass().getResource("invalid.xslt"))
.setBodyFromString("<root/>")
.build();
-
+
try {
transformMediator.mediate(mc);
fail("Expected a SynapseException to be thrown");
@@ -319,7 +322,7 @@ public class XSLTMediatorTest extends Te
// this is what is expected
}
}
-
+
/**
* Test that the XSLT mediator is able to handle CDATA sections in the
* source AXIOM tree.
@@ -330,47 +333,127 @@ public class XSLTMediatorTest extends Te
*/
public void testWithCDATA() throws Exception {
XSLTMediator transformMediator = new XSLTMediator();
- transformMediator.setXsltKey("xslt-key");
-
+ setXsltTransformationURL(transformMediator, "xslt-key");
+
MessageContext mc = new TestMessageContextBuilder()
.addEntry("xslt-key", getClass().getResource("cdata.xslt"))
.build();
-
+
OMFactory factory = OMAbstractFactory.getOMFactory();
OMElement in = factory.createOMElement(new QName(null, "in"));
factory.createOMText(in, "test", OMNode.CDATA_SECTION_NODE);
mc.getEnvelope().getBody().addChild(in);
-
+
transformMediator.mediate(mc);
-
+
OMElement out = mc.getEnvelope().getBody().getFirstElement();
assertEquals("out", out.getLocalName());
assertEquals("test", out.getText());
}
+ /**
+ * Test that the XSLT mediator is able to handle dynamic keys
+ * Xpath expression can be used to generate real key dynamically
+ * Multiple xslt files can be loaded
+ *
+ * @throws Exception Exception in case of an error in tests
+ */
+ public void testWithStaticDynamicKeys() throws Exception {
+ for (int i = 0; i < 3; i++) {
+ testMultipleKeys(i);
+ }
+ }
+
+ /**
+ * Test with multiple keys including static and dynamic keys
+ *
+ * @param num number from 0 to 2
+ * @throws Exception Exception in case of an error in tests
+ */
+ private void testMultipleKeys(int num) throws Exception {
+
+ String xsltKeyValue = null;
+
+ String path;
+ SynapseXPath xpath;
+ Key xsltKey;
+ XSLTMediator transformMediator = new XSLTMediator();
+
+ //default source, xsltFile, and state of key (dynamic or static)
+ String source = "";
+ String xsltFile = "";
+ boolean isDynamicKey = true;
+
+ // based on source, different XSLTFiles can be used
+ if (num == 0) {
+ source = SOURCE_STATIC_KEY;
+ xsltFile = "static_key.xslt";
+ xsltKeyValue = "StaticXsltKey";
+ isDynamicKey = false;
+
+ } else if (num == 1) {
+ source = SOURCE_DYNAMIC_KEY1;
+ xsltFile = "dynamic_key_1.xslt";
+ xsltKeyValue = "DynamicXsltKey1";
+ isDynamicKey = true;
+ } else if (num == 2) {
+ source = SOURCE_DYNAMIC_KEY2;
+ xsltFile = "dynamic_key_2.xslt";
+ xsltKeyValue = "DynamicXsltKey2";
+ isDynamicKey = true;
+ }
+
+ if (isDynamicKey) {
+ path = "//m0:CheckPriceRequest/m0:" + xsltKeyValue;
+ xpath = new SynapseXPath(path);
+ xpath.addNamespace("m0", "http://services.samples/xsd");
+
+ // Create key from dynamic key (xpath)
+ xsltKey = new Key(xpath);
+ // set XSLT transformation URL (Xpath)
+ transformMediator.setXsltKey(xsltKey);
+ } else {
+ //static key
+ path = xsltKeyValue;
+ // set XSLT transformation URL (static)
+ setXsltTransformationURL(transformMediator, path);
+ }
+ // Mediate twice for synCtx
+ MessageContext synCtx = new TestMessageContextBuilder().addEntry(
+ xsltKeyValue, getClass().getResource(xsltFile)).setBodyFromString(
+ source).addTextAroundBody().build();
+ transformMediator.mediate(synCtx);
+
+ synCtx = new TestMessageContextBuilder().addEntry(
+ xsltKeyValue, getClass().getResource(xsltFile)).setBodyFromString(
+ source).addTextAroundBody().build();
+ transformMediator.mediate(synCtx);
+ }
+
protected static void test(Class sbf, Class rbf) throws Exception {
-
+
XSLTMediator transformMediator = new XSLTMediator();
- transformMediator.setXsltKey("xslt-key");
-
+ Key xsltKey = new Key("xslt-key");
+ transformMediator.setXsltKey(xsltKey);
+
MessageContext mc = new TestMessageContextBuilder()
.addEntry("xslt-key", XSLTMediator.class.getResource("identity.xslt"))
.build();
-
+
OMFactory factory = OMAbstractFactory.getOMFactory();
OMElement orgRoot = factory.createOMElement(new QName("root"));
OMElement orgElement = factory.createOMElement(new QName("urn:mynamespace", "element1"));
orgElement.setText("test");
OMAttribute orgAttribute = orgElement.addAttribute("att", "testValue", null);
orgRoot.addChild(orgElement);
-
+
mc.getEnvelope().getBody().addChild(orgRoot);
-
+
transformMediator.addAttribute(XSLTMediator.SOURCE_BUILDER_FACTORY, sbf.getName());
transformMediator.addAttribute(XSLTMediator.RESULT_BUILDER_FACTORY, rbf.getName());
-
+
transformMediator.mediate(mc);
-
+
OMElement root = mc.getEnvelope().getBody().getFirstElement();
assertEquals(orgRoot.getQName(), root.getQName());
OMElement element = (OMElement)root.getFirstOMChild();
@@ -379,4 +462,15 @@ public class XSLTMediatorTest extends Te
assertEquals(orgAttribute, orgElement.getAttribute(orgAttribute.getQName()));
assertNull(element.getNextOMSibling());
}
+
+ /**
+ * Set XSLT transformation URL
+ *
+ * @param transformMediator Mediator which need to set key
+ * @param xsltKeyValue String key value (static key) to set as a key
+ */
+ private void setXsltTransformationURL(XSLTMediator transformMediator, String xsltKeyValue) {
+ Key xsltKey = new Key(xsltKeyValue);
+ transformMediator.setXsltKey(xsltKey);
+ }
}
Re: svn commit: r1061125 - /synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
Posted by Supun Kamburugamuva <su...@gmail.com>.
Fixed the break. It was due to not committing some XSLT files.
Thanks,
Supun..
On Fri, Jan 21, 2011 at 9:20 AM, Hiranya Jayathilaka
<hi...@gmail.com> wrote:
> Hi Supun,
> Hudson is detecting a test failure in the XSLTMediatorTest:
>
> Running org.apache.synapse.mediators.transform.XSLTMediatorTest
> Tests run: 29, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 14.409 sec
> <<< FAILURE!
>
> Might be related to this change. Please have a look.
> Thanks,
> Hiranya
>
> On Thu, Jan 20, 2011 at 10:47 AM, <su...@apache.org> wrote:
>>
>> Author: supun
>> Date: Thu Jan 20 05:17:49 2011
>> New Revision: 1061125
>>
>> URL: http://svn.apache.org/viewvc?rev=1061125&view=rev
>> Log:
>> adding XSLT mediator transformation test
>>
>> Modified:
>>
>> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
>>
>> Modified:
>> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
>> URL:
>> http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java?rev=1061125&r1=1061124&r2=1061125&view=diff
>>
>> ==============================================================================
>> ---
>> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
>> (original)
>> +++
>> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
>> Thu Jan 20 05:17:49 2011
>> @@ -19,36 +19,26 @@
>>
>> package org.apache.synapse.mediators.transform;
>>
>> -import javax.xml.namespace.QName;
>> -import javax.xml.transform.TransformerFactory;
>> -
>> import junit.framework.TestCase;
>> import junit.framework.TestSuite;
>> -
>> -import org.apache.axiom.om.OMAbstractFactory;
>> -import org.apache.axiom.om.OMAttribute;
>> -import org.apache.axiom.om.OMContainer;
>> -import org.apache.axiom.om.OMElement;
>> -import org.apache.axiom.om.OMFactory;
>> -import org.apache.axiom.om.OMNode;
>> +import org.apache.axiom.om.*;
>> +import org.apache.axis2.transport.base.BaseConstants;
>> import org.apache.synapse.MessageContext;
>> import org.apache.synapse.SynapseException;
>> import org.apache.synapse.TestMessageContextBuilder;
>> -import org.apache.synapse.util.jaxp.AXIOMResultBuilderFactory;
>> -import org.apache.synapse.util.jaxp.AXIOMSourceBuilderFactory;
>> -import org.apache.synapse.util.jaxp.DOOMResultBuilderFactory;
>> -import org.apache.synapse.util.jaxp.DOOMSourceBuilderFactory;
>> -import org.apache.synapse.util.jaxp.StreamResultBuilderFactory;
>> -import org.apache.synapse.util.jaxp.StreamSourceBuilderFactory;
>> +import org.apache.synapse.mediators.Key;
>> +import org.apache.synapse.util.jaxp.*;
>> import org.apache.synapse.util.xpath.SynapseXPath;
>> -import org.apache.axis2.transport.base.BaseConstants;
>> +
>> +import javax.xml.namespace.QName;
>> +import javax.xml.transform.TransformerFactory;
>>
>> public class XSLTMediatorTest extends TestCase {
>> private static final Class[] sourceBuilderFactories = {
>> DOOMSourceBuilderFactory.class,
>> StreamSourceBuilderFactory.class,
>> AXIOMSourceBuilderFactory.class };
>> -
>> +
>> private static final Class[] resultBuilderFactories = {
>> DOOMResultBuilderFactory.class,
>> StreamResultBuilderFactory.class,
>> @@ -64,6 +54,21 @@ public class XSLTMediatorTest extends Te
>> SOURCE +
>> "</m:someOtherElement>";
>>
>> + private static final String SOURCE_DYNAMIC_KEY1 =
>> + "<m0:CheckPriceRequest
>> xmlns:m0=\"http://services.samples/xsd\">\n" +
>> + "<m0:DynamicXsltKey1>DynamicXsltKey1</m0:DynamicXsltKey1>\n" +
>> + "</m0:CheckPriceRequest>\n" ;
>> +
>> + private static final String SOURCE_DYNAMIC_KEY2 =
>> + "<m0:CheckPriceRequest
>> xmlns:m0=\"http://services.samples/xsd\">\n" +
>> + "<m0:DynamicXsltKey2>DynamicXsltKey2</m0:DynamicXsltKey2>\n" +
>> + "</m0:CheckPriceRequest>\n" ;
>> +
>> + private static final String SOURCE_STATIC_KEY =
>> + "<m0:CheckPriceRequest
>> xmlns:m0=\"http://services.samples/xsd\">\n" +
>> + "<m0:StaticXsltKey>StaticXsltKey</m0:StaticXsltKey>\n" +
>> + "</m0:CheckPriceRequest>\n" ;
>> +
>> // Create the test cases for the various transformer factories, source
>> builders and
>> // result builders dynamically:
>> public static TestSuite suite() {
>> @@ -72,10 +77,10 @@ public class XSLTMediatorTest extends Te
>> addGenericTests(suite, "Saxon",
>> net.sf.saxon.TransformerFactoryImpl.class);
>> return suite;
>> }
>> -
>> +
>> private static void addGenericTests(TestSuite suite, final String
>> processorName,
>> final Class<? extends TransformerFactory>
>> transformerFactoryClass) {
>> -
>> +
>> for (final Class sbf : sourceBuilderFactories) {
>> for (final Class rbf : resultBuilderFactories) {
>> String testName = "test" + processorName + shortName(sbf)
>> + shortName(rbf);
>> @@ -94,7 +99,7 @@ public class XSLTMediatorTest extends Te
>> }
>> }
>> }
>> -
>> +
>> private static String shortName(Class clazz) {
>> String name = clazz.getName();
>> name = name.substring(name.lastIndexOf('.')+1);
>> @@ -107,13 +112,13 @@ public class XSLTMediatorTest extends Te
>> /**
>> * Check that the provided element is the result of the XSL
>> transformation of
>> * SOURCE by the stylesheet transform_unittest.xslt.
>> - *
>> + *
>> * @param node result of the XSLT to be matched
>> */
>> private void assertQuoteElement(OMNode node) {
>> assertTrue(node instanceof OMElement);
>> OMElement element = (OMElement)node;
>> -
>> +
>> assertTrue("GetQuote".equals(element.getLocalName()));
>>
>> assertTrue("http://www.webserviceX.NET/".equals(element.getNamespace().getNamespaceURI()));
>>
>> @@ -124,7 +129,7 @@ public class XSLTMediatorTest extends Te
>>
>> assertTrue("String".equals(symbolElem.getText()));
>> }
>> -
>> +
>> public void testTransformXSLTCustomSource() throws Exception {
>>
>> // create a new XSLT mediator
>> @@ -136,7 +141,7 @@ public class XSLTMediatorTest extends Te
>> transformMediator.setSource(xpath);
>>
>> // set XSLT transformation URL
>> - transformMediator.setXsltKey("xslt-key");
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>>
>> MessageContext synCtx = new
>> TestMessageContextBuilder().addFileEntry("xslt-key",
>>
>> "../../repository/conf/sample/resources/transform/transform_unittest.xslt")
>> @@ -157,7 +162,7 @@ public class XSLTMediatorTest extends Te
>> XSLTMediator transformMediator = new XSLTMediator();
>>
>> // set XSLT transformation URL
>> - transformMediator.setXsltKey("xslt-key");
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>>
>> MessageContext synCtx = new
>> TestMessageContextBuilder().addFileEntry("xslt-key",
>>
>> "../../repository/conf/sample/resources/transform/transform_unittest.xslt")
>> @@ -173,7 +178,7 @@ public class XSLTMediatorTest extends Te
>> // create a new switch mediator
>> XSLTMediator transformMediator = new XSLTMediator();
>> // set XSLT transformation URL
>> - transformMediator.setXsltKey("xslt-key");
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>>
>> for (int i=0; i<2; i++) {
>>
>> @@ -195,8 +200,7 @@ public class XSLTMediatorTest extends Te
>> // create a new switch mediator
>> XSLTMediator transformMediator = new XSLTMediator();
>> // set XSLT transformation URL
>> - transformMediator.setXsltKey("xslt-key");
>> -
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>> for (int i=0; i<2; i++) {
>>
>> // invoke transformation, with static enveope
>> @@ -216,7 +220,7 @@ public class XSLTMediatorTest extends Te
>> // create a new switch mediator
>> XSLTMediator transformMediator = new XSLTMediator();
>> // set XSLT transformation URL
>> - transformMediator.setXsltKey("xslt-key");
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>>
>> // invoke transformation, with static enveope
>> MessageContext synCtx = new
>> TestMessageContextBuilder().addFileEntry("xslt-key",
>> @@ -228,7 +232,7 @@ public class XSLTMediatorTest extends Te
>> // validate result
>> OMContainer body = synCtx.getEnvelope().getBody();
>> assertTrue(body.getFirstOMChild().getNextOMSibling() instanceof
>> OMElement);
>> - assertTrue(
>> ((OMElement)body.getFirstOMChild().getNextOMSibling()).getText().length() >
>> 0);
>> + assertTrue(((OMElement)
>> body.getFirstOMChild().getNextOMSibling()).getText().length() > 0);
>> }
>>
>>
>> @@ -237,7 +241,7 @@ public class XSLTMediatorTest extends Te
>> // create a new switch mediator
>> XSLTMediator transformMediator = new XSLTMediator();
>> // set XSLT transformation URL
>> - transformMediator.setXsltKey("xslt-key");
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>>
>> for (int i=0; i<5; i++) {
>> // invoke transformation, with static enveope
>> @@ -262,7 +266,7 @@ public class XSLTMediatorTest extends Te
>> transformMediator.setSource(xpath);
>>
>> // set XSLT transformation URL
>> - transformMediator.setXsltKey("xslt-key");
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>>
>> // invoke transformation, with static enveope
>> MessageContext synCtx = new
>> TestMessageContextBuilder().addFileEntry("xslt-key",
>> @@ -287,15 +291,15 @@ public class XSLTMediatorTest extends Te
>>
>> public void testTextEncoding() throws Exception {
>> XSLTMediator transformMediator = new XSLTMediator();
>> - transformMediator.setXsltKey("xslt-key");
>> -
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>> +
>> MessageContext mc = new
>> TestMessageContextBuilder().addFileEntry("xslt-key",
>>
>> "../../repository/conf/sample/resources/transform/encoding_test.xslt")
>>
>> .setEnvelopeFromFile("../../repository/conf/sample/resources/transform" +
>> "/encoding_test.xml").build();
>> -
>> +
>> transformMediator.mediate(mc);
>> -
>> +
>> OMElement resultElement =
>> mc.getEnvelope().getBody().getFirstElement();
>> assertEquals(BaseConstants.DEFAULT_TEXT_WRAPPER,
>> resultElement.getQName());
>> assertEquals("\u00e0 peine arriv\u00e9s nous entr\u00e2mes dans sa
>> chambre",
>> @@ -305,13 +309,12 @@ public class XSLTMediatorTest extends Te
>> // Test for SYNAPSE-307
>> public void testInvalidStylesheet() throws Exception {
>> XSLTMediator transformMediator = new XSLTMediator();
>> - transformMediator.setXsltKey("xslt-key");
>> -
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>> MessageContext mc = new TestMessageContextBuilder()
>> .addEntry("xslt-key", getClass().getResource("invalid.xslt"))
>> .setBodyFromString("<root/>")
>> .build();
>> -
>> +
>> try {
>> transformMediator.mediate(mc);
>> fail("Expected a SynapseException to be thrown");
>> @@ -319,7 +322,7 @@ public class XSLTMediatorTest extends Te
>> // this is what is expected
>> }
>> }
>> -
>> +
>> /**
>> * Test that the XSLT mediator is able to handle CDATA sections in the
>> * source AXIOM tree.
>> @@ -330,47 +333,127 @@ public class XSLTMediatorTest extends Te
>> */
>> public void testWithCDATA() throws Exception {
>> XSLTMediator transformMediator = new XSLTMediator();
>> - transformMediator.setXsltKey("xslt-key");
>> -
>> + setXsltTransformationURL(transformMediator, "xslt-key");
>> +
>> MessageContext mc = new TestMessageContextBuilder()
>> .addEntry("xslt-key", getClass().getResource("cdata.xslt"))
>> .build();
>> -
>> +
>> OMFactory factory = OMAbstractFactory.getOMFactory();
>> OMElement in = factory.createOMElement(new QName(null, "in"));
>> factory.createOMText(in, "test", OMNode.CDATA_SECTION_NODE);
>> mc.getEnvelope().getBody().addChild(in);
>> -
>> +
>> transformMediator.mediate(mc);
>> -
>> +
>> OMElement out = mc.getEnvelope().getBody().getFirstElement();
>> assertEquals("out", out.getLocalName());
>> assertEquals("test", out.getText());
>> }
>>
>> + /**
>> + * Test that the XSLT mediator is able to handle dynamic keys
>> + * Xpath expression can be used to generate real key dynamically
>> + * Multiple xslt files can be loaded
>> + *
>> + * @throws Exception Exception in case of an error in tests
>> + */
>> + public void testWithStaticDynamicKeys() throws Exception {
>> + for (int i = 0; i < 3; i++) {
>> + testMultipleKeys(i);
>> + }
>> + }
>> +
>> + /**
>> + * Test with multiple keys including static and dynamic keys
>> + *
>> + * @param num number from 0 to 2
>> + * @throws Exception Exception in case of an error in tests
>> + */
>> + private void testMultipleKeys(int num) throws Exception {
>> +
>> + String xsltKeyValue = null;
>> +
>> + String path;
>> + SynapseXPath xpath;
>> + Key xsltKey;
>> + XSLTMediator transformMediator = new XSLTMediator();
>> +
>> + //default source, xsltFile, and state of key (dynamic or static)
>> + String source = "";
>> + String xsltFile = "";
>> + boolean isDynamicKey = true;
>> +
>> + // based on source, different XSLTFiles can be used
>> + if (num == 0) {
>> + source = SOURCE_STATIC_KEY;
>> + xsltFile = "static_key.xslt";
>> + xsltKeyValue = "StaticXsltKey";
>> + isDynamicKey = false;
>> +
>> + } else if (num == 1) {
>> + source = SOURCE_DYNAMIC_KEY1;
>> + xsltFile = "dynamic_key_1.xslt";
>> + xsltKeyValue = "DynamicXsltKey1";
>> + isDynamicKey = true;
>> + } else if (num == 2) {
>> + source = SOURCE_DYNAMIC_KEY2;
>> + xsltFile = "dynamic_key_2.xslt";
>> + xsltKeyValue = "DynamicXsltKey2";
>> + isDynamicKey = true;
>> + }
>> +
>> + if (isDynamicKey) {
>> + path = "//m0:CheckPriceRequest/m0:" + xsltKeyValue;
>> + xpath = new SynapseXPath(path);
>> + xpath.addNamespace("m0", "http://services.samples/xsd");
>> +
>> + // Create key from dynamic key (xpath)
>> + xsltKey = new Key(xpath);
>> + // set XSLT transformation URL (Xpath)
>> + transformMediator.setXsltKey(xsltKey);
>> + } else {
>> + //static key
>> + path = xsltKeyValue;
>> + // set XSLT transformation URL (static)
>> + setXsltTransformationURL(transformMediator, path);
>> + }
>> + // Mediate twice for synCtx
>> + MessageContext synCtx = new TestMessageContextBuilder().addEntry(
>> + xsltKeyValue,
>> getClass().getResource(xsltFile)).setBodyFromString(
>> + source).addTextAroundBody().build();
>> + transformMediator.mediate(synCtx);
>> +
>> + synCtx = new TestMessageContextBuilder().addEntry(
>> + xsltKeyValue,
>> getClass().getResource(xsltFile)).setBodyFromString(
>> + source).addTextAroundBody().build();
>> + transformMediator.mediate(synCtx);
>> + }
>> +
>> protected static void test(Class sbf, Class rbf) throws Exception {
>> -
>> +
>> XSLTMediator transformMediator = new XSLTMediator();
>> - transformMediator.setXsltKey("xslt-key");
>> -
>> + Key xsltKey = new Key("xslt-key");
>> + transformMediator.setXsltKey(xsltKey);
>> +
>> MessageContext mc = new TestMessageContextBuilder()
>> .addEntry("xslt-key",
>> XSLTMediator.class.getResource("identity.xslt"))
>> .build();
>> -
>> +
>> OMFactory factory = OMAbstractFactory.getOMFactory();
>> OMElement orgRoot = factory.createOMElement(new QName("root"));
>> OMElement orgElement = factory.createOMElement(new
>> QName("urn:mynamespace", "element1"));
>> orgElement.setText("test");
>> OMAttribute orgAttribute = orgElement.addAttribute("att",
>> "testValue", null);
>> orgRoot.addChild(orgElement);
>> -
>> +
>> mc.getEnvelope().getBody().addChild(orgRoot);
>> -
>> +
>>
>> transformMediator.addAttribute(XSLTMediator.SOURCE_BUILDER_FACTORY,
>> sbf.getName());
>>
>> transformMediator.addAttribute(XSLTMediator.RESULT_BUILDER_FACTORY,
>> rbf.getName());
>> -
>> +
>> transformMediator.mediate(mc);
>> -
>> +
>> OMElement root = mc.getEnvelope().getBody().getFirstElement();
>> assertEquals(orgRoot.getQName(), root.getQName());
>> OMElement element = (OMElement)root.getFirstOMChild();
>> @@ -379,4 +462,15 @@ public class XSLTMediatorTest extends Te
>> assertEquals(orgAttribute,
>> orgElement.getAttribute(orgAttribute.getQName()));
>> assertNull(element.getNextOMSibling());
>> }
>> +
>> + /**
>> + * Set XSLT transformation URL
>> + *
>> + * @param transformMediator Mediator which need to set key
>> + * @param xsltKeyValue String key value (static key) to set as a key
>> + */
>> + private void setXsltTransformationURL(XSLTMediator transformMediator,
>> String xsltKeyValue) {
>> + Key xsltKey = new Key(xsltKeyValue);
>> + transformMediator.setXsltKey(xsltKey);
>> + }
>> }
>>
>>
>
>
>
> --
> Hiranya Jayathilaka
> Senior Software Engineer;
> WSO2 Inc.; http://wso2.org
> E-mail: hiranya@wso2.com; Mobile: +94 77 633 3491
> Blog: http://techfeast-hiranya.blogspot.com
>
--
Technical Lead, WSO2 Inc
http://wso2.org
supunk.blogspot.com
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@synapse.apache.org
For additional commands, e-mail: dev-help@synapse.apache.org
Re: svn commit: r1061125 - /synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
Posted by Hiranya Jayathilaka <hi...@gmail.com>.
Hi Supun,
Hudson is detecting a test failure in the XSLTMediatorTest:
Running org.apache.synapse.mediators.transform.XSLTMediatorTest
Tests run: 29, Failures: 0, Errors: 1, Skipped: 0, Time elapsed:
14.409 sec <<< FAILURE!
Might be related to this change. Please have a look.
Thanks,
Hiranya
On Thu, Jan 20, 2011 at 10:47 AM, <su...@apache.org> wrote:
> Author: supun
> Date: Thu Jan 20 05:17:49 2011
> New Revision: 1061125
>
> URL: http://svn.apache.org/viewvc?rev=1061125&view=rev
> Log:
> adding XSLT mediator transformation test
>
> Modified:
>
> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
>
> Modified:
> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
> URL:
> http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java?rev=1061125&r1=1061124&r2=1061125&view=diff
>
> ==============================================================================
> ---
> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
> (original)
> +++
> synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
> Thu Jan 20 05:17:49 2011
> @@ -19,36 +19,26 @@
>
> package org.apache.synapse.mediators.transform;
>
> -import javax.xml.namespace.QName;
> -import javax.xml.transform.TransformerFactory;
> -
> import junit.framework.TestCase;
> import junit.framework.TestSuite;
> -
> -import org.apache.axiom.om.OMAbstractFactory;
> -import org.apache.axiom.om.OMAttribute;
> -import org.apache.axiom.om.OMContainer;
> -import org.apache.axiom.om.OMElement;
> -import org.apache.axiom.om.OMFactory;
> -import org.apache.axiom.om.OMNode;
> +import org.apache.axiom.om.*;
> +import org.apache.axis2.transport.base.BaseConstants;
> import org.apache.synapse.MessageContext;
> import org.apache.synapse.SynapseException;
> import org.apache.synapse.TestMessageContextBuilder;
> -import org.apache.synapse.util.jaxp.AXIOMResultBuilderFactory;
> -import org.apache.synapse.util.jaxp.AXIOMSourceBuilderFactory;
> -import org.apache.synapse.util.jaxp.DOOMResultBuilderFactory;
> -import org.apache.synapse.util.jaxp.DOOMSourceBuilderFactory;
> -import org.apache.synapse.util.jaxp.StreamResultBuilderFactory;
> -import org.apache.synapse.util.jaxp.StreamSourceBuilderFactory;
> +import org.apache.synapse.mediators.Key;
> +import org.apache.synapse.util.jaxp.*;
> import org.apache.synapse.util.xpath.SynapseXPath;
> -import org.apache.axis2.transport.base.BaseConstants;
> +
> +import javax.xml.namespace.QName;
> +import javax.xml.transform.TransformerFactory;
>
> public class XSLTMediatorTest extends TestCase {
> private static final Class[] sourceBuilderFactories = {
> DOOMSourceBuilderFactory.class,
> StreamSourceBuilderFactory.class,
> AXIOMSourceBuilderFactory.class };
> -
> +
> private static final Class[] resultBuilderFactories = {
> DOOMResultBuilderFactory.class,
> StreamResultBuilderFactory.class,
> @@ -64,6 +54,21 @@ public class XSLTMediatorTest extends Te
> SOURCE +
> "</m:someOtherElement>";
>
> + private static final String SOURCE_DYNAMIC_KEY1 =
> + "<m0:CheckPriceRequest xmlns:m0=\"http://services.samples/xsd\">\n"
> +
> + "<m0:DynamicXsltKey1>DynamicXsltKey1</m0:DynamicXsltKey1>\n" +
> + "</m0:CheckPriceRequest>\n" ;
> +
> + private static final String SOURCE_DYNAMIC_KEY2 =
> + "<m0:CheckPriceRequest xmlns:m0=\"http://services.samples/xsd\">\n"
> +
> + "<m0:DynamicXsltKey2>DynamicXsltKey2</m0:DynamicXsltKey2>\n" +
> + "</m0:CheckPriceRequest>\n" ;
> +
> + private static final String SOURCE_STATIC_KEY =
> + "<m0:CheckPriceRequest xmlns:m0=\"http://services.samples/xsd\">\n"
> +
> + "<m0:StaticXsltKey>StaticXsltKey</m0:StaticXsltKey>\n" +
> + "</m0:CheckPriceRequest>\n" ;
> +
> // Create the test cases for the various transformer factories, source
> builders and
> // result builders dynamically:
> public static TestSuite suite() {
> @@ -72,10 +77,10 @@ public class XSLTMediatorTest extends Te
> addGenericTests(suite, "Saxon",
> net.sf.saxon.TransformerFactoryImpl.class);
> return suite;
> }
> -
> +
> private static void addGenericTests(TestSuite suite, final String
> processorName,
> final Class<? extends TransformerFactory>
> transformerFactoryClass) {
> -
> +
> for (final Class sbf : sourceBuilderFactories) {
> for (final Class rbf : resultBuilderFactories) {
> String testName = "test" + processorName + shortName(sbf) +
> shortName(rbf);
> @@ -94,7 +99,7 @@ public class XSLTMediatorTest extends Te
> }
> }
> }
> -
> +
> private static String shortName(Class clazz) {
> String name = clazz.getName();
> name = name.substring(name.lastIndexOf('.')+1);
> @@ -107,13 +112,13 @@ public class XSLTMediatorTest extends Te
> /**
> * Check that the provided element is the result of the XSL
> transformation of
> * SOURCE by the stylesheet transform_unittest.xslt.
> - *
> + *
> * @param node result of the XSLT to be matched
> */
> private void assertQuoteElement(OMNode node) {
> assertTrue(node instanceof OMElement);
> OMElement element = (OMElement)node;
> -
> +
> assertTrue("GetQuote".equals(element.getLocalName()));
> assertTrue("http://www.webserviceX.NET/
> ".equals(element.getNamespace().getNamespaceURI()));
>
> @@ -124,7 +129,7 @@ public class XSLTMediatorTest extends Te
>
> assertTrue("String".equals(symbolElem.getText()));
> }
> -
> +
> public void testTransformXSLTCustomSource() throws Exception {
>
> // create a new XSLT mediator
> @@ -136,7 +141,7 @@ public class XSLTMediatorTest extends Te
> transformMediator.setSource(xpath);
>
> // set XSLT transformation URL
> - transformMediator.setXsltKey("xslt-key");
> + setXsltTransformationURL(transformMediator, "xslt-key");
>
> MessageContext synCtx = new
> TestMessageContextBuilder().addFileEntry("xslt-key",
>
> "../../repository/conf/sample/resources/transform/transform_unittest.xslt")
> @@ -157,7 +162,7 @@ public class XSLTMediatorTest extends Te
> XSLTMediator transformMediator = new XSLTMediator();
>
> // set XSLT transformation URL
> - transformMediator.setXsltKey("xslt-key");
> + setXsltTransformationURL(transformMediator, "xslt-key");
>
> MessageContext synCtx = new
> TestMessageContextBuilder().addFileEntry("xslt-key",
>
> "../../repository/conf/sample/resources/transform/transform_unittest.xslt")
> @@ -173,7 +178,7 @@ public class XSLTMediatorTest extends Te
> // create a new switch mediator
> XSLTMediator transformMediator = new XSLTMediator();
> // set XSLT transformation URL
> - transformMediator.setXsltKey("xslt-key");
> + setXsltTransformationURL(transformMediator, "xslt-key");
>
> for (int i=0; i<2; i++) {
>
> @@ -195,8 +200,7 @@ public class XSLTMediatorTest extends Te
> // create a new switch mediator
> XSLTMediator transformMediator = new XSLTMediator();
> // set XSLT transformation URL
> - transformMediator.setXsltKey("xslt-key");
> -
> + setXsltTransformationURL(transformMediator, "xslt-key");
> for (int i=0; i<2; i++) {
>
> // invoke transformation, with static enveope
> @@ -216,7 +220,7 @@ public class XSLTMediatorTest extends Te
> // create a new switch mediator
> XSLTMediator transformMediator = new XSLTMediator();
> // set XSLT transformation URL
> - transformMediator.setXsltKey("xslt-key");
> + setXsltTransformationURL(transformMediator, "xslt-key");
>
> // invoke transformation, with static enveope
> MessageContext synCtx = new
> TestMessageContextBuilder().addFileEntry("xslt-key",
> @@ -228,7 +232,7 @@ public class XSLTMediatorTest extends Te
> // validate result
> OMContainer body = synCtx.getEnvelope().getBody();
> assertTrue(body.getFirstOMChild().getNextOMSibling() instanceof
> OMElement);
> - assertTrue(
> ((OMElement)body.getFirstOMChild().getNextOMSibling()).getText().length() >
> 0);
> + assertTrue(((OMElement)
> body.getFirstOMChild().getNextOMSibling()).getText().length() > 0);
> }
>
>
> @@ -237,7 +241,7 @@ public class XSLTMediatorTest extends Te
> // create a new switch mediator
> XSLTMediator transformMediator = new XSLTMediator();
> // set XSLT transformation URL
> - transformMediator.setXsltKey("xslt-key");
> + setXsltTransformationURL(transformMediator, "xslt-key");
>
> for (int i=0; i<5; i++) {
> // invoke transformation, with static enveope
> @@ -262,7 +266,7 @@ public class XSLTMediatorTest extends Te
> transformMediator.setSource(xpath);
>
> // set XSLT transformation URL
> - transformMediator.setXsltKey("xslt-key");
> + setXsltTransformationURL(transformMediator, "xslt-key");
>
> // invoke transformation, with static enveope
> MessageContext synCtx = new
> TestMessageContextBuilder().addFileEntry("xslt-key",
> @@ -287,15 +291,15 @@ public class XSLTMediatorTest extends Te
>
> public void testTextEncoding() throws Exception {
> XSLTMediator transformMediator = new XSLTMediator();
> - transformMediator.setXsltKey("xslt-key");
> -
> + setXsltTransformationURL(transformMediator, "xslt-key");
> +
> MessageContext mc = new
> TestMessageContextBuilder().addFileEntry("xslt-key",
>
> "../../repository/conf/sample/resources/transform/encoding_test.xslt")
>
> .setEnvelopeFromFile("../../repository/conf/sample/resources/transform" +
> "/encoding_test.xml").build();
> -
> +
> transformMediator.mediate(mc);
> -
> +
> OMElement resultElement =
> mc.getEnvelope().getBody().getFirstElement();
> assertEquals(BaseConstants.DEFAULT_TEXT_WRAPPER,
> resultElement.getQName());
> assertEquals("\u00e0 peine arriv\u00e9s nous entr\u00e2mes dans sa
> chambre",
> @@ -305,13 +309,12 @@ public class XSLTMediatorTest extends Te
> // Test for SYNAPSE-307
> public void testInvalidStylesheet() throws Exception {
> XSLTMediator transformMediator = new XSLTMediator();
> - transformMediator.setXsltKey("xslt-key");
> -
> + setXsltTransformationURL(transformMediator, "xslt-key");
> MessageContext mc = new TestMessageContextBuilder()
> .addEntry("xslt-key", getClass().getResource("invalid.xslt"))
> .setBodyFromString("<root/>")
> .build();
> -
> +
> try {
> transformMediator.mediate(mc);
> fail("Expected a SynapseException to be thrown");
> @@ -319,7 +322,7 @@ public class XSLTMediatorTest extends Te
> // this is what is expected
> }
> }
> -
> +
> /**
> * Test that the XSLT mediator is able to handle CDATA sections in the
> * source AXIOM tree.
> @@ -330,47 +333,127 @@ public class XSLTMediatorTest extends Te
> */
> public void testWithCDATA() throws Exception {
> XSLTMediator transformMediator = new XSLTMediator();
> - transformMediator.setXsltKey("xslt-key");
> -
> + setXsltTransformationURL(transformMediator, "xslt-key");
> +
> MessageContext mc = new TestMessageContextBuilder()
> .addEntry("xslt-key", getClass().getResource("cdata.xslt"))
> .build();
> -
> +
> OMFactory factory = OMAbstractFactory.getOMFactory();
> OMElement in = factory.createOMElement(new QName(null, "in"));
> factory.createOMText(in, "test", OMNode.CDATA_SECTION_NODE);
> mc.getEnvelope().getBody().addChild(in);
> -
> +
> transformMediator.mediate(mc);
> -
> +
> OMElement out = mc.getEnvelope().getBody().getFirstElement();
> assertEquals("out", out.getLocalName());
> assertEquals("test", out.getText());
> }
>
> + /**
> + * Test that the XSLT mediator is able to handle dynamic keys
> + * Xpath expression can be used to generate real key dynamically
> + * Multiple xslt files can be loaded
> + *
> + * @throws Exception Exception in case of an error in tests
> + */
> + public void testWithStaticDynamicKeys() throws Exception {
> + for (int i = 0; i < 3; i++) {
> + testMultipleKeys(i);
> + }
> + }
> +
> + /**
> + * Test with multiple keys including static and dynamic keys
> + *
> + * @param num number from 0 to 2
> + * @throws Exception Exception in case of an error in tests
> + */
> + private void testMultipleKeys(int num) throws Exception {
> +
> + String xsltKeyValue = null;
> +
> + String path;
> + SynapseXPath xpath;
> + Key xsltKey;
> + XSLTMediator transformMediator = new XSLTMediator();
> +
> + //default source, xsltFile, and state of key (dynamic or static)
> + String source = "";
> + String xsltFile = "";
> + boolean isDynamicKey = true;
> +
> + // based on source, different XSLTFiles can be used
> + if (num == 0) {
> + source = SOURCE_STATIC_KEY;
> + xsltFile = "static_key.xslt";
> + xsltKeyValue = "StaticXsltKey";
> + isDynamicKey = false;
> +
> + } else if (num == 1) {
> + source = SOURCE_DYNAMIC_KEY1;
> + xsltFile = "dynamic_key_1.xslt";
> + xsltKeyValue = "DynamicXsltKey1";
> + isDynamicKey = true;
> + } else if (num == 2) {
> + source = SOURCE_DYNAMIC_KEY2;
> + xsltFile = "dynamic_key_2.xslt";
> + xsltKeyValue = "DynamicXsltKey2";
> + isDynamicKey = true;
> + }
> +
> + if (isDynamicKey) {
> + path = "//m0:CheckPriceRequest/m0:" + xsltKeyValue;
> + xpath = new SynapseXPath(path);
> + xpath.addNamespace("m0", "http://services.samples/xsd");
> +
> + // Create key from dynamic key (xpath)
> + xsltKey = new Key(xpath);
> + // set XSLT transformation URL (Xpath)
> + transformMediator.setXsltKey(xsltKey);
> + } else {
> + //static key
> + path = xsltKeyValue;
> + // set XSLT transformation URL (static)
> + setXsltTransformationURL(transformMediator, path);
> + }
> + // Mediate twice for synCtx
> + MessageContext synCtx = new TestMessageContextBuilder().addEntry(
> + xsltKeyValue,
> getClass().getResource(xsltFile)).setBodyFromString(
> + source).addTextAroundBody().build();
> + transformMediator.mediate(synCtx);
> +
> + synCtx = new TestMessageContextBuilder().addEntry(
> + xsltKeyValue,
> getClass().getResource(xsltFile)).setBodyFromString(
> + source).addTextAroundBody().build();
> + transformMediator.mediate(synCtx);
> + }
> +
> protected static void test(Class sbf, Class rbf) throws Exception {
> -
> +
> XSLTMediator transformMediator = new XSLTMediator();
> - transformMediator.setXsltKey("xslt-key");
> -
> + Key xsltKey = new Key("xslt-key");
> + transformMediator.setXsltKey(xsltKey);
> +
> MessageContext mc = new TestMessageContextBuilder()
> .addEntry("xslt-key",
> XSLTMediator.class.getResource("identity.xslt"))
> .build();
> -
> +
> OMFactory factory = OMAbstractFactory.getOMFactory();
> OMElement orgRoot = factory.createOMElement(new QName("root"));
> OMElement orgElement = factory.createOMElement(new
> QName("urn:mynamespace", "element1"));
> orgElement.setText("test");
> OMAttribute orgAttribute = orgElement.addAttribute("att",
> "testValue", null);
> orgRoot.addChild(orgElement);
> -
> +
> mc.getEnvelope().getBody().addChild(orgRoot);
> -
> +
> transformMediator.addAttribute(XSLTMediator.SOURCE_BUILDER_FACTORY,
> sbf.getName());
> transformMediator.addAttribute(XSLTMediator.RESULT_BUILDER_FACTORY,
> rbf.getName());
> -
> +
> transformMediator.mediate(mc);
> -
> +
> OMElement root = mc.getEnvelope().getBody().getFirstElement();
> assertEquals(orgRoot.getQName(), root.getQName());
> OMElement element = (OMElement)root.getFirstOMChild();
> @@ -379,4 +462,15 @@ public class XSLTMediatorTest extends Te
> assertEquals(orgAttribute,
> orgElement.getAttribute(orgAttribute.getQName()));
> assertNull(element.getNextOMSibling());
> }
> +
> + /**
> + * Set XSLT transformation URL
> + *
> + * @param transformMediator Mediator which need to set key
> + * @param xsltKeyValue String key value (static key) to set as a key
> + */
> + private void setXsltTransformationURL(XSLTMediator transformMediator,
> String xsltKeyValue) {
> + Key xsltKey = new Key(xsltKeyValue);
> + transformMediator.setXsltKey(xsltKey);
> + }
> }
>
>
>
--
Hiranya Jayathilaka
Senior Software Engineer;
WSO2 Inc.; http://wso2.org
E-mail: hiranya@wso2.com; Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com