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 2010/09/06 12:32:32 UTC
svn commit: r992991 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/builder/
camel-core/src/main/java/org/apache/camel/component/language/
camel-core/src/main/java/org/apache/camel/language/simple...
Author: davsclaus
Date: Mon Sep 6 10:32:31 2010
New Revision: 992991
URL: http://svn.apache.org/viewvc?rev=992991&view=rev
Log:
CAMEL-3106: Added language component. So you can send messages to language endpoint and have a script being evaluated on the message, and the result as the new message body.
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/
camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageComponent.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageProducer.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/package.html
- copied, changed from r992940, camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/package.html
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/language
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageEndpointScriptRouteTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageHeaderRouteTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteConvertBodyTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteNoTransformTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTakePrecedenceTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptRouteTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageXPathRouteTest.java
camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java (with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.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/spi/LanguageResolver.java
camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java
camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=992991&r1=992990&r2=992991&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Mon Sep 6 10:32:31 2010
@@ -85,10 +85,10 @@ public interface Exchange {
String HTTP_CHUNKED = "CamelHttpChunked";
String HTTP_SERVLET_REQUEST = "CamelHttpServletRequest";
String HTTP_SERVLET_RESPONSE = "CamelHttpServletResponse";
-
String INTERCEPTED_ENDPOINT = "CamelInterceptedEndpoint";
+ String LANGUAGE_SCRIPT = "CamelLanguageScript";
String LOG_DEBUG_BODY_MAX_CHARS = "CamelLogDebugBodyMaxChars";
String LOG_DEBUG_BODY_STREAMS = "CamelLogDebugStreams";
String LOOP_INDEX = "CamelLoopIndex";
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=992991&r1=992990&r2=992991&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Mon Sep 6 10:32:31 2010
@@ -660,6 +660,34 @@ public final class ExpressionBuilder {
}
/**
+ * Returns the expression for the exchanges inbound message body converted
+ * to the given type
+ */
+ public static Expression mandatoryBodyExpression(final String name) {
+ return new ExpressionAdapter() {
+ @SuppressWarnings("unchecked")
+ public Object evaluate(Exchange exchange) {
+ Class type;
+ try {
+ type = exchange.getContext().getClassResolver().resolveMandatoryClass(name);
+ } catch (ClassNotFoundException e) {
+ throw ObjectHelper.wrapCamelExecutionException(exchange, e);
+ }
+ try {
+ return exchange.getIn().getMandatoryBody(type);
+ } catch (InvalidPayloadException e) {
+ throw ObjectHelper.wrapCamelExecutionException(exchange, e);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "mandatoryBodyAs[" + name + "]";
+ }
+ };
+ }
+
+ /**
* Returns the expression for the current thread name
*/
public static Expression threadNameExpression() {
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageComponent.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageComponent.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageComponent.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,56 @@
+/**
+ * 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.component.language;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Expression;
+import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.spi.Language;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * The <a href="http://camel.apache.org/language-component.html">language component</a> to send
+ * {@link org.apache.camel.Exchange}s to a given language and have the script being executed.
+ *
+ * @version $Revision$
+ */
+public class LanguageComponent extends DefaultComponent {
+
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+ String name = ObjectHelper.before(remaining, ":");
+ String script = ObjectHelper.after(remaining, ":");
+ // no script then remaining is the language name
+ if (name == null && script == null) {
+ name = remaining;
+ }
+
+ if (ObjectHelper.isEmpty(name)) {
+ throw new IllegalArgumentException("Illegal syntax. Name of language not given in uri: " + uri);
+ }
+ Language language = getCamelContext().resolveLanguage(name);
+
+ Expression expression = null;
+ if (ObjectHelper.isNotEmpty(script)) {
+ expression = language.createExpression(script);
+ }
+
+ return new LanguageEndpoint(uri, this, language, expression);
+ }
+
+}
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,119 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Expression;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.spi.Language;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Language endpoint.
+ *
+ * @version $Revision$
+ */
+public class LanguageEndpoint extends DefaultEndpoint {
+ private Language language;
+ private Expression expression;
+ private String languageName;
+ private String script;
+ private boolean transform = true;
+
+ public LanguageEndpoint() {
+ }
+
+ public LanguageEndpoint(String endpointUri, Component component, Language language, Expression expression) {
+ super(endpointUri, component);
+ this.language = language;
+ this.expression = expression;
+ }
+
+ public Producer createProducer() throws Exception {
+ ObjectHelper.notNull(getCamelContext(), "CamelContext", this);
+
+ if (language == null && languageName != null) {
+ language = getCamelContext().resolveLanguage(languageName);
+ }
+
+ ObjectHelper.notNull(language, "language", this);
+ if (expression == null && script != null) {
+ expression = language.createExpression(script);
+ }
+
+ return new LanguageProducer(this);
+ }
+
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new RuntimeCamelException("Cannot consume to a LanguageEndpoint: " + getEndpointUri());
+ }
+
+ public boolean isSingleton() {
+ return true;
+ }
+
+ @Override
+ protected String createEndpointUri() {
+ return languageName + ":" + script;
+ }
+
+ public Language getLanguage() {
+ return language;
+ }
+
+ public Expression getExpression() {
+ return expression;
+ }
+
+ public boolean isTransform() {
+ return transform;
+ }
+
+ /**
+ * Whether or not the result of the script should be used as message body.
+ * <p/>
+ * This options is default <tt>true</tt>.
+ *
+ * @param transform <tt>true</tt> to use result as new message body, <tt>false</tt> to keep the existing message body
+ */
+ public void setTransform(boolean transform) {
+ this.transform = transform;
+ }
+
+ /**
+ * Sets the name of the language to use
+ *
+ * @param languageName the name of the language
+ */
+ public void setLanguageName(String languageName) {
+ this.languageName = languageName;
+ }
+
+ /**
+ * Sets the script to execute
+ *
+ * @param script the script
+ */
+ public void setScript(String script) {
+ this.script = script;
+ }
+
+}
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageProducer.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageProducer.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/LanguageProducer.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,70 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Language producer.
+ *
+ * @version $Revision$
+ */
+public class LanguageProducer extends DefaultProducer {
+
+ public LanguageProducer(LanguageEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ // is there a custom expression in the header?
+ Expression exp = exchange.getIn().getHeader(Exchange.LANGUAGE_SCRIPT, Expression.class);
+ if (exp == null) {
+ String script = exchange.getIn().getHeader(Exchange.LANGUAGE_SCRIPT, String.class);
+ if (script != null) {
+ exp = getEndpoint().getLanguage().createExpression(script);
+ }
+ }
+ // if not fallback to use expression from endpoint
+ if (exp == null) {
+ exp = getEndpoint().getExpression();
+ }
+
+ ObjectHelper.notNull(exp, "expression");
+
+ Object result = exp.evaluate(exchange, Object.class);
+ if (log.isDebugEnabled()) {
+ log.debug("Evaluated expression as: " + result + " with: " + exchange);
+ }
+
+ // set message body if transform is enabled
+ if (getEndpoint().isTransform()) {
+ if (exchange.hasOut()) {
+ exchange.getOut().setBody(result);
+ } else {
+ exchange.getIn().setBody(result);
+ }
+ }
+ }
+
+ @Override
+ public LanguageEndpoint getEndpoint() {
+ return (LanguageEndpoint) super.getEndpoint();
+ }
+}
Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/package.html (from r992940, camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/package.html)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/package.html?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/package.html&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/package.html&r1=992940&r2=992991&rev=992991&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/package.html (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/language/package.html Mon Sep 6 10:32:31 2010
@@ -19,7 +19,8 @@
</head>
<body>
-The <a href="http://camel.apache.org/log.html">Log Component</a> uses Jakarta Commons Logging to log message exchanges.
+The <a href="http://camel.apache.org/language-component.html">Language Component</a> to send messages to language endpoints executing
+the script.
</body>
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=992991&r1=992990&r2=992991&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 Sep 6 10:32:31 2010
@@ -133,6 +133,16 @@ public class SimpleLanguage extends Simp
type = StringHelper.removeQuotes(type);
return ExpressionBuilder.bodyExpression(type);
}
+ // mandatoryBodyAs
+ remainder = ifStartsWithReturnRemainder("mandatoryBodyAs", expression);
+ if (remainder != null) {
+ String type = ObjectHelper.between(remainder, "(", ")");
+ if (type == null) {
+ throw new ExpressionIllegalSyntaxException("Valid syntax: ${mandatoryBodyAs(type)} was: " + expression);
+ }
+ type = StringHelper.removeQuotes(type);
+ return ExpressionBuilder.mandatoryBodyExpression(type);
+ }
// body OGNL
remainder = ifStartsWithReturnRemainder("body", expression);
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LanguageResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LanguageResolver.java?rev=992991&r1=992990&r2=992991&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LanguageResolver.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LanguageResolver.java Mon Sep 6 10:32:31 2010
@@ -17,6 +17,7 @@
package org.apache.camel.spi;
import org.apache.camel.CamelContext;
+import org.apache.camel.NoSuchLanguageException;
/**
* A pluggable strategy for resolving different languages in a loosely coupled manner
@@ -28,9 +29,10 @@ public interface LanguageResolver {
/**
* Resolves the given language.
*
- * @param name the name of the langauge
+ * @param name the name of the language
* @param context the camel context
* @return the resolved language
+ * @throws NoSuchLanguageException is thrown if language could not be resolved
*/
- Language resolveLanguage(String name, CamelContext context);
+ Language resolveLanguage(String name, CamelContext context) throws NoSuchLanguageException;
}
Added: camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/language
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/language?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/language (added)
+++ camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/language Mon Sep 6 10:32:31 2010
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+class=org.apache.camel.component.language.LanguageComponent
\ No newline at end of file
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageEndpointScriptRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageEndpointScriptRouteTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageEndpointScriptRouteTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageEndpointScriptRouteTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,51 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageEndpointScriptRouteTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBody("direct:start", "World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ // START SNIPPET: e1
+ LanguageEndpoint le = new LanguageEndpoint();
+ le.setCamelContext(context);
+ le.setLanguageName("simple");
+ le.setScript("Hello ${body}");
+
+ from("direct:start").to(le).to("mock:result");
+ // END SNIPPET: e1
+ }
+ };
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageHeaderRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageHeaderRouteTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageHeaderRouteTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageHeaderRouteTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,44 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageHeaderRouteTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBodyAndHeader("direct:start", "Hi", "foo", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("language:header:foo").to("mock:result");
+ }
+ };
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteConvertBodyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteConvertBodyTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteConvertBodyTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteConvertBodyTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,61 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageRouteConvertBodyTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("123;Camel in Action");
+
+ template.sendBody("direct:start", new MyOrder(123, "Camel in Action"));
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ // START SNIPPET: e1
+ from("direct:start").to("language:simple:${mandatoryBodyAs(String)}").to("mock:result");
+ // END SNIPPET: e1
+ }
+ };
+ }
+
+ private final class MyOrder {
+ private int id;
+ private String name;
+
+ private MyOrder(int id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return id + ";" + name;
+ }
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteNoTransformTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteNoTransformTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteNoTransformTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteNoTransformTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,44 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageRouteNoTransformTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("World");
+
+ template.sendBody("direct:start", "World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("language:simple:Hello ${body}?transform=false").to("mock:result");
+ }
+ };
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageRouteTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,46 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageRouteTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBody("direct:start", "World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ // START SNIPPET: e1
+ from("direct:start").to("language:simple:Hello ${body}").to("mock:result");
+ // END SNIPPET: e1
+ }
+ };
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTakePrecedenceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTakePrecedenceTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTakePrecedenceTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTakePrecedenceTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,53 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageScriptInHeaderRouteTakePrecedenceTest extends ContextTestSupport {
+
+ public void testLanguageWithHeader() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBodyAndHeader("direct:start", "World", Exchange.LANGUAGE_SCRIPT, "Hello ${body}");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testLanguageNoHeader() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+
+ template.sendBody("direct:start", "World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("language:simple:Bye ${body}").to("mock:result");
+ }
+ };
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptInHeaderRouteTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,45 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageScriptInHeaderRouteTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBodyAndHeader("direct:start", "World", Exchange.LANGUAGE_SCRIPT, "Hello ${body}");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("language:simple").to("mock:result");
+ }
+ };
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptRouteTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptRouteTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageScriptRouteTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,54 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.JndiRegistry;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageScriptRouteTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBody("direct:start", "World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected JndiRegistry createRegistry() throws Exception {
+ JndiRegistry jndi = super.createRegistry();
+ jndi.bind("myScript", "Hello ${body}");
+ return jndi;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ // START SNIPPET: e1
+ from("direct:start").to("language:simple?script=#myScript").to("mock:result");
+ // END SNIPPET: e1
+ }
+ };
+ }
+}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageXPathRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageXPathRouteTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageXPathRouteTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/language/LanguageXPathRouteTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,44 @@
+/**
+ * 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.component.language;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageXPathRouteTest extends ContextTestSupport {
+
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+ template.sendBody("direct:start", "<foo>Hello World</foo>");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("language:xpath:/foo/text()").to("mock:result");
+ }
+ };
+ }
+}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java?rev=992991&r1=992990&r2=992991&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java Mon Sep 6 10:32:31 2010
@@ -28,6 +28,7 @@ import org.apache.camel.CamelExecutionEx
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
import org.apache.camel.ExpressionIllegalSyntaxException;
+import org.apache.camel.InvalidPayloadException;
import org.apache.camel.LanguageTestSupport;
import org.apache.camel.component.bean.MethodNotFoundException;
import org.apache.camel.language.bean.RuntimeBeanExpressionException;
@@ -165,6 +166,9 @@ public class SimpleTest extends Language
assertExpression("${bodyAs(String)}", "<hello id='m123'>world!</hello>");
assertExpression("${bodyAs('String')}", "<hello id='m123'>world!</hello>");
+ exchange.getIn().setBody(null);
+ assertExpression("${bodyAs('String')}", null);
+
exchange.getIn().setBody(456);
assertExpression("${bodyAs(Integer)}", 456);
assertExpression("${bodyAs(int)}", 456);
@@ -178,6 +182,30 @@ public class SimpleTest extends Language
}
}
+ public void testMandatoryBodyAs() throws Exception {
+ assertExpression("${mandatoryBodyAs(String)}", "<hello id='m123'>world!</hello>");
+ assertExpression("${mandatoryBodyAs('String')}", "<hello id='m123'>world!</hello>");
+
+ exchange.getIn().setBody(null);
+ try {
+ assertExpression("${mandatoryBodyAs('String')}", "");
+ } catch (CamelExecutionException e) {
+ assertIsInstanceOf(InvalidPayloadException.class, e.getCause());
+ }
+
+ exchange.getIn().setBody(456);
+ assertExpression("${mandatoryBodyAs(Integer)}", 456);
+ assertExpression("${mandatoryBodyAs(int)}", 456);
+ assertExpression("${mandatoryBodyAs('int')}", 456);
+
+ try {
+ assertExpression("${mandatoryBodyAs(XXX)}", 456);
+ fail("Should have thrown an exception");
+ } catch (CamelExecutionException e) {
+ assertIsInstanceOf(ClassNotFoundException.class, e.getCause());
+ }
+ }
+
public void testHeaderAs() throws Exception {
assertExpression("${headerAs(foo,String)}", "abc");
Modified: camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java?rev=992991&r1=992990&r2=992991&view=diff
==============================================================================
--- camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java (original)
+++ camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovyLanguageTest.java Mon Sep 6 10:32:31 2010
@@ -22,10 +22,11 @@ import org.apache.camel.LanguageTestSupp
* @version $Revision$
*/
public class GroovyLanguageTest extends LanguageTestSupport {
+
public void testGroovyExpressions() throws Exception {
assertExpression("exchange.in.headers.foo", "abc");
assertExpression("request.headers.foo", "abc");
- //assertExpression("headers.foo", "abc");
+ assertExpression("headers.foo", "abc");
}
protected String getLanguageName() {
Added: camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java?rev=992991&view=auto
==============================================================================
--- camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java (added)
+++ camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java Mon Sep 6 10:32:31 2010
@@ -0,0 +1,49 @@
+/**
+ * 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.groovy;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ * @version $Revision$
+ */
+public class LanguageGroovyRouteTest extends CamelTestSupport {
+
+ @Test
+ public void testLanguage() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived(6);
+
+ template.sendBody("direct:start", 3);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ // START SNIPPET: e1
+ from("direct:start").to("language:groovy:request.body * 2").to("mock:result");
+ // END SNIPPET: e1
+ }
+ };
+ }
+
+}
Propchange: camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/LanguageGroovyRouteTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date