1
2
3
4
5
6
7
8
9
10
11 package org.mule.xml.util.properties;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.config.MuleProperties;
15 import org.mule.api.registry.RegistrationException;
16 import org.mule.module.xml.expression.JXPathExpressionEvaluator;
17 import org.mule.module.xml.util.NamespaceManager;
18 import org.mule.tck.AbstractMuleTestCase;
19 import org.mule.tck.testmodels.fruit.Apple;
20 import org.mule.tck.testmodels.fruit.Banana;
21 import org.mule.tck.testmodels.fruit.FruitBowl;
22
23 import java.net.MalformedURLException;
24 import java.util.HashMap;
25 import java.util.Map;
26
27 public class JXPathExpressionEvaluatorTestCase extends AbstractMuleTestCase
28 {
29
30 private static final String XML_USING_UNDEFINED_NAMESPACE = "<root " +
31 "xmlns:z=\"http://www.w3schools.com/furniture\">" +
32 "<z:table>" +
33 "<z:name>African Coffee Table</z:name>" +
34 "<z:width>80</z:width>" +
35 "<z:length>120</z:length>" +
36 "</z:table>" +
37 "</root>";
38
39 public void testBean()
40 {
41 Apple apple = new Apple();
42 apple.wash();
43 FruitBowl payload = new FruitBowl(apple, new Banana());
44 DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
45
46 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
47 Object value = e.evaluate("apple/washed", msg);
48 assertNotNull(value);
49 assertTrue(value instanceof Boolean);
50 assertTrue(((Boolean) value).booleanValue());
51
52 value = e.evaluate("bar", msg);
53 assertNull(value);
54 }
55
56 public void testXmlContainingNoNameSpaces() throws MalformedURLException
57 {
58 String payload = "<?xml version=\"1.0\" ?>" +
59 "<address>" +
60 "<street>Orchard Road</street>" +
61 "</address>";
62
63 DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
64
65 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
66 Object value = e.evaluate("/address/street", msg);
67
68 assertTrue(value instanceof String);
69 assertEquals("Orchard Road", (String) value);
70 }
71
72 public void testXmlIfNameSpaceIsDefinedWithTheSamePrefix() throws MalformedURLException
73 {
74 String payload = "<root " +
75 "xmlns:f=\"http://www.w3schools.com/furniture\">" +
76 "<f:table>" +
77 "<f:name>African Coffee Table</f:name>" +
78 "<f:width>80</f:width>" +
79 "<f:length>120</f:length>" +
80 "</f:table>" +
81 "</root>";
82
83 DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
84
85 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
86 Object value = e.evaluate("//f:table/f:name", msg);
87
88 assertTrue(value instanceof String);
89 assertEquals("African Coffee Table", (String) value);
90 }
91
92 public void testXmlWithInvalidNameSpaceIfNameSpaceAliasIsUndefined() throws MalformedURLException
93 {
94 final String xpathExpression = "//f:table/f:name";
95
96 DefaultMuleMessage msg = new DefaultMuleMessage(XML_USING_UNDEFINED_NAMESPACE, muleContext);
97
98 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
99 Object value = e.evaluate(xpathExpression, msg);
100 assertNull(value);
101 }
102
103 public void testXmlWithInvalidNameSpaceIfNameSpaceAliasIsDefined() throws MalformedURLException, RegistrationException
104 {
105 NamespaceManager namespaceManager = new NamespaceManager();
106 Map namespaces = new HashMap();
107 namespaces.put("f", "http://www.w3schools.com/furniture");
108 namespaceManager.setNamespaces(namespaces);
109 muleContext.getRegistry().registerObject(MuleProperties.OBJECT_MULE_NAMESPACE_MANAGER, namespaceManager);
110
111 DefaultMuleMessage msg = new DefaultMuleMessage(XML_USING_UNDEFINED_NAMESPACE, muleContext);
112
113 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
114 e.setMuleContext(muleContext);
115
116 Object value = e.evaluate("//f:table/f:name", msg);
117 assertTrue(value instanceof String);
118 assertEquals("African Coffee Table", (String) value);
119 }
120 }