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 2011/10/30 11:12:34 UTC
svn commit: r1195142 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/model/language/
main/java/org/apache/camel/support/ test/java/org/apache/camel/language/
Author: davsclaus
Date: Sun Oct 30 10:12:33 2011
New Revision: 1195142
URL: http://svn.apache.org/viewvc?rev=1195142&view=rev
Log:
CAMEL-4595: Polished
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenPairPredicateTest.java
- copied, changed from r1195125, camel/trunk/camel-core/src/test/java/org/apache/camel/language/XPathFromFileExceptionTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/TokenizerExpression.java
camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java
camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/TokenizerExpression.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/TokenizerExpression.java?rev=1195142&r1=1195141&r2=1195142&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/TokenizerExpression.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/TokenizerExpression.java Sun Oct 30 10:12:33 2011
@@ -23,7 +23,9 @@ import javax.xml.bind.annotation.XmlRoot
import org.apache.camel.CamelContext;
import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
import org.apache.camel.language.tokenizer.TokenizeLanguage;
+import org.apache.camel.util.ExpressionToPredicateAdapter;
/**
* For expressions and predicates using a body or header tokenizer.
@@ -95,6 +97,12 @@ public class TokenizerExpression extends
}
@Override
+ public Predicate createPredicate(CamelContext camelContext) {
+ Expression exp = createExpression(camelContext);
+ return ExpressionToPredicateAdapter.toPredicate(exp);
+ }
+
+ @Override
public String toString() {
if (endToken != null) {
return "tokenize{body() using tokens: " + token + "..." + endToken + "}";
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java?rev=1195142&r1=1195141&r2=1195142&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java Sun Oct 30 10:12:33 2011
@@ -24,6 +24,7 @@ import java.util.Scanner;
import org.apache.camel.Exchange;
import org.apache.camel.InvalidPayloadException;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
/**
@@ -51,7 +52,9 @@ public class TokenPairExpressionIterator
public Object evaluate(Exchange exchange) {
try {
InputStream in = exchange.getIn().getMandatoryBody(InputStream.class);
- return new TokenPairIterator(startToken, endToken, in);
+ // we may read from a file, and want to support custom charset defined on the exchange
+ String charset = IOHelper.getCharsetName(exchange);
+ return new TokenPairIterator(startToken, endToken, in, charset);
} catch (InvalidPayloadException e) {
exchange.setException(e);
return null;
@@ -73,11 +76,11 @@ public class TokenPairExpressionIterator
private final Scanner scanner;
private Object image;
- private TokenPairIterator(String startToken, String endToken, InputStream in) {
+ private TokenPairIterator(String startToken, String endToken, InputStream in, String charset) {
this.startToken = startToken;
this.endToken = endToken;
// use end token as delimiter
- this.scanner = new Scanner(in).useDelimiter(endToken);
+ this.scanner = new Scanner(in, charset).useDelimiter(endToken);
// this iterator will do look ahead as we may have data
// after the last end token, which the scanner would find
// so we need to be one step ahead of the scanner
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenPairPredicateTest.java (from r1195125, camel/trunk/camel-core/src/test/java/org/apache/camel/language/XPathFromFileExceptionTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenPairPredicateTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenPairPredicateTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/language/XPathFromFileExceptionTest.java&r1=1195125&r2=1195142&rev=1195142&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/XPathFromFileExceptionTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenPairPredicateTest.java Sun Oct 30 10:12:33 2011
@@ -25,46 +25,27 @@ import org.apache.camel.builder.RouteBui
/**
*
*/
-public class XPathFromFileExceptionTest extends ContextTestSupport {
+public class TokenPairPredicateTest extends ContextTestSupport {
@Override
protected void setUp() throws Exception {
- deleteDirectory("target/xpath");
+ deleteDirectory("target/pair");
super.setUp();
}
- public void testXPathFromFileExceptionOk() throws Exception {
+ public void testTokenPairPredicate() throws Exception {
getMockEndpoint("mock:result").expectedMessageCount(1);
- getMockEndpoint("mock:error").expectedMessageCount(0);
- template.sendBodyAndHeader("file:target/xpath", "<hello>world!</hello>", Exchange.FILE_NAME, "hello.xml");
+ template.sendBodyAndHeader("file:target/pair", "<hello>world!</hello>", Exchange.FILE_NAME, "hello.xml");
assertMockEndpointsSatisfied();
oneExchangeDone.matchesMockWaitTime();
- File file = new File("target/xpath/hello.xml");
+ File file = new File("target/pair/hello.xml");
assertFalse("File should not exists " + file, file.exists());
- file = new File("target/xpath/ok/hello.xml");
- assertTrue("File should exists " + file, file.exists());
- }
-
- public void testXPathFromFileExceptionFail() throws Exception {
- getMockEndpoint("mock:result").expectedMessageCount(0);
- getMockEndpoint("mock:error").expectedMessageCount(1);
-
- // the last tag is not ended properly
- template.sendBodyAndHeader("file:target/xpath", "<hello>world!</hello", Exchange.FILE_NAME, "hello2.xml");
-
- assertMockEndpointsSatisfied();
-
- oneExchangeDone.matchesMockWaitTime();
-
- File file = new File("target/xpath/hello2.xml");
- assertFalse("File should not exists " + file, file.exists());
-
- file = new File("target/xpath/error/hello2.xml");
+ file = new File("target/pair/ok/hello.xml");
assertTrue("File should exists " + file, file.exists());
}
@@ -73,12 +54,11 @@ public class XPathFromFileExceptionTest
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- from("file:target/xpath?moveFailed=error&move=ok")
- .onException(Exception.class)
- .to("mock:error")
- .end()
+ from("file:target/pair?move=ok")
.choice()
- .when().xpath("/hello").to("mock:result")
+ // does not make so much sense to use a tokenPair in a predicate
+ // but you can do it nevertheless
+ .when().tokenizePair("<hello>", "</hello>").to("mock:result")
.end();
}
};
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java?rev=1195142&r1=1195141&r2=1195142&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java Sun Oct 30 10:12:33 2011
@@ -143,6 +143,15 @@ public class TokenizerTest extends Excha
exchange.getIn().setBody("");
List names = exp.evaluate(exchange, List.class);
+ assertEquals(0, names.size());
+ }
+
+ public void testTokenizePairNullData() throws Exception {
+ Expression exp = TokenizeLanguage.tokenizePair("<person>", "</person>");
+
+ exchange.getIn().setBody(null);
+
+ List names = exp.evaluate(exchange, List.class);
assertNull(names);
}