/*
* 2012-3 Red Hat Inc. and/or its affiliates and other contributors.
*
* 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 org.overlord.rtgov.activity.processor.xpath;
import static org.junit.Assert.*;
import javax.xml.soap.SOAPMessage;
import org.junit.Test;
import org.overlord.rtgov.activity.processor.xpath.XPathExpressionEvaluator;
public class XPathExpressionEvaluatorTest {
@Test
public void testEvaluateStringNoNamespace() {
String value="hello";
String xml="<mydoc><field>"+value+"</field></mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/mydoc/field");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
String result=evaluator.evaluate(xml);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateStringNamespace() {
String value="hello";
String xml="<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>"+value+"</ns1:field></ns1:mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
String result=evaluator.evaluate(xml);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateStringDefaultNamespace() {
String value="hello";
String xml="<mydoc xmlns=\"http://www.mynamespace\" ><field>"+value+"</field></mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
String result=evaluator.evaluate(xml);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMNamespace() {
String value="hello";
String xml="<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>"+value+"</ns1:field></ns1:mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field/text()");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
String result=evaluator.evaluate(doc.getDocumentElement());
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMNamespace2() {
String expected="<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns1:field xmlns:ns1=\"http://www.mynamespace\">hello</ns1:field>";
String xml="<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>hello</ns1:field></ns1:mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
String result=evaluator.evaluate(doc.getDocumentElement());
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(expected)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMNamespaceUnaware() {
String value="hello";
String xml="<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>"+value+"</ns1:field></ns1:mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field/text()");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
String result=evaluator.evaluate(doc.getDocumentElement());
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMNamespaceUnaware2() {
String expected="<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns1:field xmlns:ns1=\"http://www.mynamespace\">hello</ns1:field>";
String xml="<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>hello</ns1:field></ns1:mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
String result=evaluator.evaluate(doc.getDocumentElement());
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(expected)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSource() {
String value="hello";
String xml="<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>"+value+"</ns1:field></ns1:mydoc>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field/text()");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(doc.getDocumentElement());
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSource1() {
String xml="<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>hello</ns1:field></ns1:mydoc>";
String expected="<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns1:field xmlns:ns1=\"http://www.mynamespace\">hello</ns1:field>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(doc.getDocumentElement());
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(expected)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSource2() {
String value="Fred";
String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><orders:submitOrder xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\"> <order> <orderId>PO-19838-XYZ</orderId> <itemId>BUTTER</itemId> <quantity>10</quantity> <customer>Fred</customer> </order> </orders:submitOrder>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/orders:submitOrder/order/customer/text()");
evaluator.getNamespaces().put("orders", "urn:switchyard-quickstart-demo:orders:1.0");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(doc.getDocumentElement());
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSource3() {
String innerxml="<order> <orderId>PO-19838-XYZ</orderId> <itemId>BUTTER</itemId> <quantity>10</quantity> <customer>Fred</customer> </order>";
String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><orders:submitOrder xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\"> "+innerxml+" </orders:submitOrder>";
String expected="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+innerxml;
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/orders:submitOrder/order");
evaluator.getNamespaces().put("orders", "urn:switchyard-quickstart-demo:orders:1.0");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(doc.getDocumentElement());
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(expected)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSource2NamespaceUnaware() {
String value="Fred";
String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><orders:submitOrder xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\"> <order> <orderId>PO-19838-XYZ</orderId> <itemId>BUTTER</itemId> <quantity>10</quantity> <customer>Fred</customer> </order> </orders:submitOrder>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/orders:submitOrder/order/customer/text()");
evaluator.getNamespaces().put("orders", "urn:switchyard-quickstart-demo:orders:1.0");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(doc.getDocumentElement());
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSource3NamespaceUnaware() {
String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><orders:submitOrder xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\"> <order> <orderId>PO-19838-XYZ</orderId> <itemId>BUTTER</itemId> <quantity>10</quantity> <customer>Fred</customer> </order> </orders:submitOrder>";
String expected="<?xml version=\"1.0\" encoding=\"UTF-8\"?><customer>Fred</customer>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/orders:submitOrder/order/customer");
evaluator.getNamespaces().put("orders", "urn:switchyard-quickstart-demo:orders:1.0");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Document doc=null;
try {
javax.xml.parsers.DocumentBuilderFactory factory=
javax.xml.parsers.DocumentBuilderFactory.newInstance();
javax.xml.parsers.DocumentBuilder builder=
factory.newDocumentBuilder();
java.io.InputStream is=
new java.io.ByteArrayInputStream(xml.getBytes());
doc = builder.parse(is);
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(doc.getDocumentElement());
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(expected)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSourceSOAPMessage() {
String value="hello";
String xml="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>" +
"<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>"+value+"</ns1:field></ns1:mydoc>" +
"</soap:Body></soap:Envelope>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("ns2:field/text()");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Node node=null;
try {
java.io.InputStream is=new java.io.ByteArrayInputStream(xml.getBytes());
SOAPMessage soapm=javax.xml.soap.MessageFactory.newInstance().createMessage(null, is);
node = soapm.getSOAPBody().getFirstChild();
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(node);
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSourceSOAPMessage1() {
String expected="<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns1:field xmlns:ns1=\"http://www.mynamespace\">hello</ns1:field>";
String xml="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>" +
"<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>hello</ns1:field></ns1:mydoc>" +
"</soap:Body></soap:Envelope>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("ns2:field");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Node node=null;
try {
java.io.InputStream is=new java.io.ByteArrayInputStream(xml.getBytes());
SOAPMessage soapm=javax.xml.soap.MessageFactory.newInstance().createMessage(null, is);
node = soapm.getSOAPBody().getFirstChild();
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(node);
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(expected)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSourceSOAPMessage2() {
String value="hello";
String xml="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>" +
"<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>"+value+"</ns1:field></ns1:mydoc>" +
"</soap:Body></soap:Envelope>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field/text()");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Node node=null;
try {
java.io.InputStream is=new java.io.ByteArrayInputStream(xml.getBytes());
SOAPMessage soapm=javax.xml.soap.MessageFactory.newInstance().createMessage(null, is);
node = soapm.getSOAPBody().getFirstChild();
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(node);
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateDOMSourceSOAPMessage3() {
String expected="<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns1:field xmlns:ns1=\"http://www.mynamespace\">hello</ns1:field>";
String xml="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>" +
"<ns1:mydoc xmlns:ns1=\"http://www.mynamespace\" ><ns1:field>hello</ns1:field></ns1:mydoc>" +
"</soap:Body></soap:Envelope>";
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("/ns2:mydoc/ns2:field");
evaluator.getNamespaces().put("ns2", "http://www.mynamespace");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
org.w3c.dom.Node node=null;
try {
java.io.InputStream is=new java.io.ByteArrayInputStream(xml.getBytes());
SOAPMessage soapm=javax.xml.soap.MessageFactory.newInstance().createMessage(null, is);
node = soapm.getSOAPBody().getFirstChild();
is.close();
} catch(Exception e) {
fail("Failed to parse xml: "+e);
}
javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(node);
String result=evaluator.evaluate(source);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(expected)) {
fail("Result not expected: "+result);
}
}
@Test
public void testEvaluateJavaBeans() {
String value="Fred";
Order order=new Order();
Customer cust=new Customer();
cust.setName(value);
order.setCustomer(cust);
XPathExpressionEvaluator evaluator=new XPathExpressionEvaluator();
evaluator.setExpression("customer/name");
try {
evaluator.init();
} catch(Exception e) {
fail("Failed to initialize: "+e);
}
String result=evaluator.evaluate(order);
if (result == null) {
fail("Failed to get result");
}
if (!result.equals(value)) {
fail("Result not expected: "+result);
}
}
public static class Customer {
private String _name;
public String getName() {
return (_name);
}
public void setName(String name) {
_name = name;
}
}
public static class Order {
private Customer _customer=null;
public Customer getCustomer() {
return (_customer);
}
public void setCustomer(Customer cust) {
_customer = cust;
}
}
}