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.junit4.AbstractMuleContextTestCase;
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 import org.junit.Test;
28
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertNotNull;
31 import static org.junit.Assert.assertNull;
32 import static org.junit.Assert.assertTrue;
33
34 @SuppressWarnings("deprecation")
35 public class JXPathExpressionEvaluatorTestCase extends AbstractMuleContextTestCase
36 {
37 private static final String XML_USING_UNDEFINED_NAMESPACE = "<root " +
38 "xmlns:z=\"http://www.w3schools.com/furniture\">" +
39 "<z:table>" +
40 "<z:name>African Coffee Table</z:name>" +
41 "<z:width>80</z:width>" +
42 "<z:length>120</z:length>" +
43 "</z:table>" +
44 "</root>";
45
46 @Test
47 public void testBean()
48 {
49 Apple apple = new Apple();
50 apple.wash();
51 FruitBowl payload = new FruitBowl(apple, new Banana());
52 DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
53
54 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
55 Object value = e.evaluate("apple/washed", msg);
56 assertNotNull(value);
57 assertTrue(value instanceof Boolean);
58 assertTrue(((Boolean) value).booleanValue());
59
60 value = e.evaluate("bar", msg);
61 assertNull(value);
62 }
63
64 @Test
65 public void testXmlContainingNoNameSpaces() throws MalformedURLException
66 {
67 String payload = "<?xml version=\"1.0\" ?>" +
68 "<address>" +
69 "<street>Orchard Road</street>" +
70 "</address>";
71
72 DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
73
74 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
75 Object value = e.evaluate("/address/street", msg);
76
77 assertTrue(value instanceof String);
78 assertEquals("Orchard Road", value);
79 }
80
81 @Test
82 public void testXmlIfNameSpaceIsDefinedWithTheSamePrefix() throws MalformedURLException
83 {
84 String payload = "<root " +
85 "xmlns:f=\"http://www.w3schools.com/furniture\">" +
86 "<f:table>" +
87 "<f:name>African Coffee Table</f:name>" +
88 "<f:width>80</f:width>" +
89 "<f:length>120</f:length>" +
90 "</f:table>" +
91 "</root>";
92
93 DefaultMuleMessage msg = new DefaultMuleMessage(payload, muleContext);
94
95 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
96 Object value = e.evaluate("//f:table/f:name", msg);
97
98 assertTrue(value instanceof String);
99 assertEquals("African Coffee Table", value);
100 }
101
102 @Test
103 public void testXmlWithInvalidNameSpaceIfNameSpaceAliasIsUndefined() throws MalformedURLException
104 {
105 final String xpathExpression = "//f:table/f:name";
106
107 DefaultMuleMessage msg = new DefaultMuleMessage(XML_USING_UNDEFINED_NAMESPACE, muleContext);
108
109 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
110 Object value = e.evaluate(xpathExpression, msg);
111 assertNull(value);
112 }
113
114 @Test
115 public void testXmlWithInvalidNameSpaceIfNameSpaceAliasIsDefined() throws MalformedURLException, RegistrationException
116 {
117 NamespaceManager namespaceManager = new NamespaceManager();
118 Map<String, Object> namespaces = new HashMap<String, Object>();
119 namespaces.put("f", "http://www.w3schools.com/furniture");
120 namespaceManager.setNamespaces(namespaces);
121 muleContext.getRegistry().registerObject(MuleProperties.OBJECT_MULE_NAMESPACE_MANAGER, namespaceManager);
122
123 DefaultMuleMessage msg = new DefaultMuleMessage(XML_USING_UNDEFINED_NAMESPACE, muleContext);
124
125 JXPathExpressionEvaluator e = new JXPathExpressionEvaluator();
126 e.setMuleContext(muleContext);
127
128 Object value = e.evaluate("//f:table/f:name", msg);
129 assertTrue(value instanceof String);
130 assertEquals("African Coffee Table", value);
131 }
132 }