You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/05/21 12:45:26 UTC
svn commit: r1340961 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/language/simple/
main/resources/META-INF/services/org/apache/camel/language/
test/java/org/apache/camel/language/
Author: davsclaus
Date: Mon May 21 10:45:26 2012
New Revision: 1340961
URL: http://svn.apache.org/viewvc?rev=1340961&view=rev
Log:
CAMEL-5295: File language should not allow escaping as the escape character is a path separator on windows platforms
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleParser.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file
camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/BaseSimpleParser.java Mon May 21 10:45:26 2012
@@ -44,9 +44,11 @@ public abstract class BaseSimpleParser {
protected SimpleToken token;
protected int previousIndex;
protected int index;
+ protected boolean allowEscape = true;
- protected BaseSimpleParser(String expression) {
+ protected BaseSimpleParser(String expression, boolean allowEscape) {
this.expression = expression;
+ this.allowEscape = allowEscape;
}
/**
@@ -55,7 +57,7 @@ public abstract class BaseSimpleParser {
*/
protected void nextToken() {
if (index < expression.length()) {
- SimpleToken next = SimpleTokenizer.nextToken(expression, index);
+ SimpleToken next = SimpleTokenizer.nextToken(expression, index, allowEscape);
// add token
tokens.add(next);
token = next;
@@ -76,7 +78,7 @@ public abstract class BaseSimpleParser {
*/
protected void nextToken(TokenType... filter) {
if (index < expression.length()) {
- SimpleToken next = SimpleTokenizer.nextToken(expression, index, filter);
+ SimpleToken next = SimpleTokenizer.nextToken(expression, index, allowEscape, filter);
// add token
tokens.add(next);
token = next;
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java?rev=1340961&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java Mon May 21 10:45:26 2012
@@ -0,0 +1,36 @@
+/**
+ * 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.camel.language.simple;
+
+/**
+ *
+ */
+public class FileLanguage extends SimpleLanguage {
+
+ public FileLanguage() {
+ // do not allow escaping, as Windows uses \ as path separator
+ setAllowEscape(false);
+ }
+
+ @Override
+ public void setAllowEscape(boolean allowEscape) {
+ if (allowEscape) {
+ throw new IllegalArgumentException("File language does not allow escape");
+ }
+ this.allowEscape = allowEscape;
+ }
+}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleParser.java?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleParser.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleBackwardsCompatibleParser.java Mon May 21 10:45:26 2012
@@ -43,12 +43,12 @@ public final class SimpleBackwardsCompat
// static methods
}
- public static Expression parseExpression(String expression) {
- return doParseExpression(expression);
+ public static Expression parseExpression(String expression, boolean allowEscape) {
+ return doParseExpression(expression, allowEscape);
}
- public static Predicate parsePredicate(String expression) {
- Expression answer = doParseExpression(expression);
+ public static Predicate parsePredicate(String expression, boolean allowEscape) {
+ Expression answer = doParseExpression(expression, allowEscape);
if (answer != null) {
return ExpressionToPredicateAdapter.toPredicate(answer);
} else {
@@ -56,10 +56,10 @@ public final class SimpleBackwardsCompat
}
}
- private static Expression doParseExpression(String expression) {
+ private static Expression doParseExpression(String expression, boolean allowEscape) {
// should have no function tokens
for (int i = 0; i < expression.length(); i++) {
- SimpleToken token = SimpleTokenizer.nextToken(expression, i, TokenType.functionStart, TokenType.functionEnd);
+ SimpleToken token = SimpleTokenizer.nextToken(expression, i, allowEscape, TokenType.functionStart, TokenType.functionEnd);
if (token.getType().getType() == TokenType.functionStart || token.getType().getType() == TokenType.functionEnd) {
return null;
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java Mon May 21 10:45:26 2012
@@ -38,8 +38,13 @@ import org.apache.camel.language.simple.
*/
public class SimpleExpressionParser extends BaseSimpleParser {
+ @Deprecated
public SimpleExpressionParser(String expression) {
- super(expression);
+ super(expression, true);
+ }
+
+ public SimpleExpressionParser(String expression, boolean allowEscape) {
+ super(expression, allowEscape);
}
public Expression parseExpression() {
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java Mon May 21 10:45:26 2012
@@ -93,7 +93,8 @@ public class SimpleLanguage implements L
// singleton for expressions without a result type
private static final SimpleLanguage SIMPLE = new SimpleLanguage();
- private Class<?> resultType;
+ protected Class<?> resultType;
+ protected boolean allowEscape = true;
/**
* Default constructor.
@@ -109,6 +110,14 @@ public class SimpleLanguage implements L
this.resultType = resultType;
}
+ public boolean isAllowEscape() {
+ return allowEscape;
+ }
+
+ public void setAllowEscape(boolean allowEscape) {
+ this.allowEscape = allowEscape;
+ }
+
@Override
public boolean isSingleton() {
// we cannot be singleton as we have state
@@ -122,10 +131,10 @@ public class SimpleLanguage implements L
expression = expression.trim();
// support old simple language syntax
@SuppressWarnings("deprecation")
- Predicate answer = SimpleBackwardsCompatibleParser.parsePredicate(expression);
+ Predicate answer = SimpleBackwardsCompatibleParser.parsePredicate(expression, allowEscape);
if (answer == null) {
// use the new parser
- SimplePredicateParser parser = new SimplePredicateParser(expression);
+ SimplePredicateParser parser = new SimplePredicateParser(expression, allowEscape);
answer = parser.parsePredicate();
}
return answer;
@@ -138,10 +147,10 @@ public class SimpleLanguage implements L
expression = expression.trim();
// support old simple language syntax
@SuppressWarnings("deprecation")
- Expression answer = SimpleBackwardsCompatibleParser.parseExpression(expression);
+ Expression answer = SimpleBackwardsCompatibleParser.parseExpression(expression, allowEscape);
if (answer == null) {
// use the new parser
- SimpleExpressionParser parser = new SimpleExpressionParser(expression);
+ SimpleExpressionParser parser = new SimpleExpressionParser(expression, allowEscape);
answer = parser.parseExpression();
}
if (resultType != null) {
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java Mon May 21 10:45:26 2012
@@ -51,8 +51,13 @@ import org.apache.camel.util.ExpressionT
*/
public class SimplePredicateParser extends BaseSimpleParser {
+ @Deprecated
public SimplePredicateParser(String expression) {
- super(expression);
+ super(expression, true);
+ }
+
+ public SimplePredicateParser(String expression, boolean allowEscape) {
+ super(expression, allowEscape);
}
public Predicate parsePredicate() {
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java Mon May 21 10:45:26 2012
@@ -116,11 +116,12 @@ public final class SimpleTokenizer {
*
* @param expression the input expression
* @param index the current index
+ * @param allowEscape whether to allow escapes
* @param filter defines the accepted token types to be returned (character is always used as fallback)
* @return the created token, will always return a token
*/
- public static SimpleToken nextToken(String expression, int index, TokenType... filter) {
- return doNextToken(expression, index, filter);
+ public static SimpleToken nextToken(String expression, int index, boolean allowEscape, TokenType... filter) {
+ return doNextToken(expression, index, allowEscape, filter);
}
/**
@@ -128,13 +129,14 @@ public final class SimpleTokenizer {
*
* @param expression the input expression
* @param index the current index
+ * @param allowEscape whether to allow escapes
* @return the created token, will always return a token
*/
- public static SimpleToken nextToken(String expression, int index) {
- return doNextToken(expression, index);
+ public static SimpleToken nextToken(String expression, int index, boolean allowEscape) {
+ return doNextToken(expression, index, allowEscape);
}
- private static SimpleToken doNextToken(String expression, int index, TokenType... filters) {
+ private static SimpleToken doNextToken(String expression, int index, boolean allowEscape, TokenType... filters) {
boolean numericAllowed = acceptType(TokenType.numericValue, filters);
if (numericAllowed) {
@@ -165,7 +167,7 @@ public final class SimpleTokenizer {
}
}
- boolean escapeAllowed = acceptType(TokenType.escape, filters);
+ boolean escapeAllowed = allowEscape && acceptType(TokenType.escape, filters);
if (escapeAllowed) {
StringBuilder sb = new StringBuilder();
char ch = expression.charAt(index);
Modified: camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file (original)
+++ camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file Mon May 21 10:45:26 2012
@@ -15,4 +15,4 @@
# limitations under the License.
#
-class=org.apache.camel.language.simple.SimpleLanguage
\ No newline at end of file
+class=org.apache.camel.language.simple.FileLanguage
\ No newline at end of file
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java?rev=1340961&r1=1340960&r2=1340961&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java Mon May 21 10:45:26 2012
@@ -158,6 +158,11 @@ public class FileLanguageTest extends La
assertExpression("backup-${bean:generator.generateFilename}.txt", "backup-generatorbybean.txt");
}
+ public void testNoEscapeAllowed() throws Exception {
+ exchange.getIn().setHeader(Exchange.FILE_NAME, "hello.txt");
+ assertExpression("target\\newdir\\onwindows\\${file:name}", "target\\newdir\\onwindows\\hello.txt");
+ }
+
public Exchange createExchange() {
// create the file
String uri = "file://target/filelanguage?fileExist=Override";