You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2007/04/20 21:35:43 UTC
svn commit: r530896 - in /incubator/ode/trunk/bpel-compiler/src:
main/java/org/apache/ode/bpel/elang/xpath10/compiler/
main/java/org/apache/ode/bpel/elang/xpath20/compiler/
test/java/org/apache/ode/bpel/compiler/
Author: boisvert
Date: Fri Apr 20 12:35:42 2007
New Revision: 530896
URL: http://svn.apache.org/viewvc?view=rev&rev=530896
Log:
Better validation for emtpy XPath expressions + associated test cases
Added:
incubator/ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java
Modified:
incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XPath10ExpressionCompilerImpl.java
incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java
Modified: incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XPath10ExpressionCompilerImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XPath10ExpressionCompilerImpl.java?view=diff&rev=530896&r1=530895&r2=530896
==============================================================================
--- incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XPath10ExpressionCompilerImpl.java (original)
+++ incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath10/compiler/XPath10ExpressionCompilerImpl.java Fri Apr 20 12:35:42 2007
@@ -111,6 +111,9 @@
xpathStr = node.getNodeValue();
xpathStr = xpathStr.trim();
+ if (xpathStr.length() == 0) {
+ throw new CompilationException(__msgs.errXPathSyntax(xpathStr));
+ }
try {
XPathReader reader = XPathReaderFactory.createReader();
Modified: incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java?view=diff&rev=530896&r1=530895&r2=530896
==============================================================================
--- incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java (original)
+++ incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/elang/xpath20/compiler/XPath20ExpressionCompilerImpl.java Fri Apr 20 12:35:42 2007
@@ -19,8 +19,16 @@
package org.apache.ode.bpel.elang.xpath20.compiler;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.xpath.XPathExpressionException;
+
import net.sf.saxon.xpath.XPathEvaluator;
import net.sf.saxon.xpath.XPathFactoryImpl;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.compiler.api.CompilationException;
@@ -37,12 +45,6 @@
import org.apache.ode.utils.xsl.XslTransformHandler;
import org.w3c.dom.Node;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.xpath.XPathExpressionException;
-import java.util.HashMap;
-import java.util.Map;
-
/**
* XPath compiler based on the SAXON implementation.
* @author Matthieu Riou <mriou at apache dot org>
@@ -123,6 +125,9 @@
}
xpathStr = node.getNodeValue();
xpathStr = xpathStr.trim();
+ if (xpathStr.length() == 0) {
+ throw new CompilationException(__msgs.warnXPath20Syntax(DOMUtils.domToString(node), "empty string"));
+ }
out.xpath = xpathStr;
try {
Added: incubator/ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java?view=auto&rev=530896
==============================================================================
--- incubator/ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java (added)
+++ incubator/ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java Fri Apr 20 12:35:42 2007
@@ -0,0 +1,270 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.ode.bpel.compiler;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.wsdl.Operation;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.ode.bpel.compiler.api.CompilationException;
+import org.apache.ode.bpel.compiler.api.CompilerContext;
+import org.apache.ode.bpel.compiler.api.ExpressionCompiler;
+import org.apache.ode.bpel.compiler.api.SourceLocation;
+import org.apache.ode.bpel.compiler.bom.Activity;
+import org.apache.ode.bpel.compiler.bom.BpelObject;
+import org.apache.ode.bpel.compiler.bom.Expression;
+import org.apache.ode.bpel.compiler.bom.ScopeLikeActivity;
+import org.apache.ode.bpel.elang.xpath10.compiler.XPath10ExpressionCompilerBPEL11;
+import org.apache.ode.bpel.elang.xpath10.compiler.XPath10ExpressionCompilerBPEL20;
+import org.apache.ode.bpel.elang.xpath10.compiler.XPath10ExpressionCompilerBPEL20Draft;
+import org.apache.ode.bpel.elang.xpath20.compiler.XPath20ExpressionCompilerBPEL20;
+import org.apache.ode.bpel.elang.xpath20.compiler.XPath20ExpressionCompilerBPEL20Draft;
+import org.apache.ode.bpel.o.OActivity;
+import org.apache.ode.bpel.o.OElementVarType;
+import org.apache.ode.bpel.o.OExpression;
+import org.apache.ode.bpel.o.OLValueExpression;
+import org.apache.ode.bpel.o.OLink;
+import org.apache.ode.bpel.o.OMessageVarType;
+import org.apache.ode.bpel.o.OPartnerLink;
+import org.apache.ode.bpel.o.OProcess;
+import org.apache.ode.bpel.o.OScope;
+import org.apache.ode.bpel.o.OXsdTypeVarType;
+import org.apache.ode.bpel.o.OXslSheet;
+import org.apache.ode.bpel.o.OMessageVarType.Part;
+import org.apache.ode.bpel.o.OProcess.OProperty;
+import org.apache.ode.bpel.o.OProcess.OPropertyAlias;
+import org.apache.ode.bpel.o.OScope.CorrelationSet;
+import org.apache.ode.bpel.o.OScope.Variable;
+import org.apache.ode.utils.DOMUtils;
+import org.apache.ode.utils.NSContext;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+public class XPathTest extends TestCase {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testEmptyXPath10StringBPEL11() throws Exception {
+ XPath10ExpressionCompilerBPEL11 compiler = new XPath10ExpressionCompilerBPEL11();
+ assertCompilationExceptionForEmptyXPath(compiler);
+ }
+
+ public void testEmptyXPath10StringBPEL20Draft() throws Exception {
+ XPath10ExpressionCompilerBPEL20Draft compiler = new XPath10ExpressionCompilerBPEL20Draft();
+ assertCompilationExceptionForEmptyXPath(compiler);
+ }
+
+ public void testEmptyXPath10StringBPEL20() throws Exception {
+ XPath10ExpressionCompilerBPEL20 compiler = new XPath10ExpressionCompilerBPEL20();
+ assertCompilationExceptionForEmptyXPath(compiler);
+ }
+
+ public void testEmptyXPath20StringBPEL20Draft() throws Exception {
+ XPath20ExpressionCompilerBPEL20Draft compiler = new XPath20ExpressionCompilerBPEL20Draft();
+ assertCompilationExceptionForEmptyXPath(compiler);
+ }
+
+ public void testEmptyXPath20StringBPEL20() throws Exception {
+ XPath20ExpressionCompilerBPEL20 compiler = new XPath20ExpressionCompilerBPEL20();
+ assertCompilationExceptionForEmptyXPath(compiler);
+ }
+
+ private void assertCompilationExceptionForEmptyXPath(
+ ExpressionCompiler compiler) throws SAXException, IOException {
+ compiler.setCompilerContext(new MockCompilerContext());
+ Element element = DOMUtils.stringToDOM("<condition> </condition>");
+ Expression xpath = new Expression(element);
+ try {
+ compiler.compile(xpath);
+ throw new Exception("Empty string is invalid XPath");
+ } catch (Exception except) {
+ // System.out.println("Empty XPath caused: " + except.getClass());
+ // except.printStackTrace();
+ assertTrue("Expected a CompilationException",
+ except instanceof CompilationException);
+ }
+ }
+}
+
+class MockCompilerContext implements CompilerContext {
+ private OProcess _oprocess = new OProcess("20");
+
+ private Map<String, Variable> _vars = new HashMap<String, Variable>();
+
+ public OExpression constantExpr(boolean value) {
+ return null;
+ }
+
+ public OExpression compileJoinCondition(Expression expr)
+ throws CompilationException {
+ return null;
+ }
+
+ public OExpression compileExpr(Expression expr) throws CompilationException {
+ return null;
+ }
+
+ public OLValueExpression compileLValueExpr(Expression expr)
+ throws CompilationException {
+ return null;
+ }
+
+ public OXslSheet compileXslt(String docStrUri) throws CompilationException {
+ return null;
+ }
+
+ public OXsdTypeVarType resolveXsdType(QName typeName)
+ throws CompilationException {
+ return null;
+ }
+
+ public OProperty resolveProperty(QName name) throws CompilationException {
+ return null;
+ }
+
+ public Variable resolveVariable(String name) throws CompilationException {
+ return _vars.get(name);
+ }
+
+ public List<Variable> getAccessibleVariables() {
+ return new ArrayList<Variable>(_vars.values());
+ }
+
+ public Variable resolveMessageVariable(String inputVar)
+ throws CompilationException {
+ return _vars.get(inputVar);
+ }
+
+ public Variable resolveMessageVariable(String inputVar, QName messageType)
+ throws CompilationException {
+ return _vars.get(inputVar);
+ }
+
+ public Part resolvePart(Variable variable, String partname)
+ throws CompilationException {
+ return ((OMessageVarType) variable.type).parts.get(partname);
+ }
+
+ public OActivity compile(Activity child) throws CompilationException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public OActivity compileSLC(Activity source) throws CompilationException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public OPartnerLink resolvePartnerLink(String name)
+ throws CompilationException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Operation resolvePartnerRoleOperation(OPartnerLink partnerLink,
+ String operationName) throws CompilationException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Operation resolveMyRoleOperation(OPartnerLink partnerLink,
+ String operationName) throws CompilationException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public OPropertyAlias resolvePropertyAlias(Variable variable, QName property)
+ throws CompilationException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void recoveredFromError(Object where, CompilationException bce)
+ throws CompilationException {
+ }
+
+ public OLink resolveLink(String linkName) throws CompilationException {
+ return null;
+ }
+
+ public OScope resolveCompensatableScope(String scopeToCompensate)
+ throws CompilationException {
+ return null;
+ }
+
+ public OProcess getOProcess() throws CompilationException {
+ return _oprocess;
+ }
+
+ public CorrelationSet resolveCorrelationSet(String csetName)
+ throws CompilationException {
+ return null;
+ }
+
+ public String getSourceLocation() {
+ return null;
+ }
+
+ public void compile(OActivity context, BpelObject activity, Runnable run) {
+ }
+
+ public boolean isPartnerLinkAssigned(String plink) {
+ return false;
+ }
+
+ public List<OActivity> getActivityStack() {
+ return null;
+ }
+
+ public void registerElementVar(String name, QName type) {
+ OElementVarType varType = new OElementVarType(getOProcess(), type);
+ OScope.Variable var = new OScope.Variable(getOProcess(), varType);
+ var.name = name;
+ _vars.put(name, var);
+ }
+
+ public OExpression compileExpr(String locationstr, NSContext nsContext) {
+ return null;
+ }
+
+ public OActivity getCurrent() {
+ return null;
+ }
+
+ public OScope compileSLC(ScopeLikeActivity child, Variable[] variables) {
+ return null;
+ }
+
+ public void recoveredFromError(SourceLocation location,
+ CompilationException error) {
+ }
+}