View Javadoc

1   /*
2    * $Id: JXPathExpressionEvaluatorTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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 }