[ 
https://issues.apache.org/jira/browse/CAMEL-12079?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16385013#comment-16385013
 ] 

ASF GitHub Bot commented on CAMEL-12079:
----------------------------------------

davsclaus closed pull request #2156: CAMEL-12079: Bean language: support 
bean::function notation
URL: https://github.com/apache/camel/pull/2156
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/camel-core/src/main/java/org/apache/camel/language/bean/BeanLanguage.java 
b/camel-core/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
index a7ac33a527d..459a5627f47 100644
--- a/camel-core/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
+++ b/camel-core/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
@@ -91,10 +91,19 @@ public Expression createExpression(String expression) {
             beanName = ObjectHelper.before(expression, "?");
             method = ObjectHelper.after(expression, "?method=");
         } else {
-            int idx = expression.indexOf('.');
-            if (idx > 0) {
-                beanName = expression.substring(0, idx);
-                method = expression.substring(idx + 1);
+            //first check case :: because of my.own.Bean::method
+            int doubleColonIndex = expression.indexOf("::");
+            //need to check that not inside params
+            int beginOfParameterDeclaration = expression.indexOf("(");
+            if (doubleColonIndex > 0 && (expression.indexOf("(") < 0 || 
doubleColonIndex < beginOfParameterDeclaration)) {
+                beanName = expression.substring(0, doubleColonIndex);
+                method = expression.substring(doubleColonIndex + 2);
+            } else {
+                int idx = expression.indexOf('.');
+                if (idx > 0) {
+                    beanName = expression.substring(0, idx);
+                    method = expression.substring(idx + 1);
+                }
             }
         }
 
@@ -109,4 +118,4 @@ public Expression createExpression(Object bean, String 
method) {
     public boolean isSingleton() {
         return true;
     }
-}
\ No newline at end of file
+}
diff --git a/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java 
b/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
index 6f28dac9139..152f7dbd619 100644
--- a/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
@@ -127,7 +127,7 @@ public static String getScheme(String uri) {
      *     <il>classpath:nameOfFile - to refer to the classpath (default)</il>
      *     <il>http:uri - to load the resource using HTTP</il>
      *     <il>ref:nameOfBean - to lookup the resource in the {@link 
org.apache.camel.spi.Registry}</il>
-     *     <il>bean:nameOfBean.methodName - to lookup a bean in the {@link 
org.apache.camel.spi.Registry} and call the method</il>
+     *     <il>bean:nameOfBean.methodName or bean:nameOfBean::methodName - to 
lookup a bean in the {@link org.apache.camel.spi.Registry} and call the 
method</il>
      *     <il><customProtocol>:uri - to lookup the resource using a custom 
{@link java.net.URLStreamHandler} registered for the <customProtocol>,
      *     on how to register it @see java.net.URL#URL(java.lang.String, 
java.lang.String, int, java.lang.String)</il>
      * </ul>
@@ -147,10 +147,6 @@ public static InputStream 
resolveMandatoryResourceAsInputStream(CamelContext cam
             return new ByteArrayInputStream(value.getBytes());
         } else if (uri.startsWith("bean:")) {
             String bean = uri.substring(5);
-            if (bean.contains(".")) {
-                String method = StringHelper.after(bean, ".");
-                bean = StringHelper.before(bean, ".") + "?method=" + method;
-            }
             Exchange dummy = new DefaultExchange(camelContext);
             Object out = 
camelContext.resolveLanguage("bean").createExpression(bean).evaluate(dummy, 
Object.class);
             if (dummy.getException() != null) {
diff --git a/camel-core/src/test/java/org/apache/camel/language/BeanTest.java 
b/camel-core/src/test/java/org/apache/camel/language/BeanTest.java
index de541e41f87..84bd55440de 100644
--- a/camel-core/src/test/java/org/apache/camel/language/BeanTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/BeanTest.java
@@ -32,13 +32,26 @@
 public class BeanTest extends LanguageTestSupport {
 
     public void testSimpleExpressions() throws Exception {
+        assertExpression("foo.echo('e::o')", "e::o");
+        assertExpression("foo.echo('e.o')", "e.o");
+        assertExpression("my.company.MyClass::echo('a')", "a");
+        assertExpression("my.company.MyClass::echo('a.b')", "a.b");
+        assertExpression("my.company.MyClass::echo('a::b')", "a::b");
         assertExpression("foo.cheese", "abc");
         assertExpression("foo?method=cheese", "abc");
+        assertExpression("my.company.MyClass::cheese", "abc");
+        assertExpression("foo?method=echo('e::o')", "e::o");
     }
 
     public void testPredicates() throws Exception {
         assertPredicate("foo.isFooHeaderAbc");
         assertPredicate("foo?method=isFooHeaderAbc");
+        assertPredicate("my.company.MyClass::isFooHeaderAbc");
+    }
+
+    public void testDoubleColon() throws Exception {
+        assertPredicate("foo::isFooHeaderAbc");
+        assertPredicateFails("foo:isFooHeaderAbc");
     }
 
     public void testBeanTypeExpression() throws Exception {
@@ -99,6 +112,7 @@ protected String getLanguageName() {
     protected Context createJndiContext() throws Exception {
         Context context = super.createJndiContext();
         context.bind("foo", new MyBean());
+        context.bind("my.company.MyClass", new MyBean());
         return context;
     }
 
@@ -108,6 +122,10 @@ public Object cheese(Exchange exchange) {
             return in.getHeader("foo");
         }
 
+        public String echo(String echo) {
+            return echo;
+        }
+
         public boolean isFooHeaderAbc(@Header("foo") String foo) {
             return "abc".equals(foo);
         }
@@ -118,4 +136,4 @@ public String hello(String name) {
             return "Hello " + name;
         }
     }
-}
\ No newline at end of file
+}
diff --git 
a/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java 
b/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java
index 1efcc4e01ff..cc12490e80a 100644
--- a/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java
+++ b/camel-core/src/test/java/org/apache/camel/util/ResourceHelperTest.java
@@ -16,13 +16,12 @@
  */
 package org.apache.camel.util;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.io.*;
 import java.net.URL;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.TestSupport;
@@ -101,6 +100,60 @@ public void testLoadRegistry() throws Exception {
         context.stop();
     }
 
+    public void testLoadBeanDoubleColon() throws Exception {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("myBean", new AtomicReference<InputStream>(new 
ByteArrayInputStream("a".getBytes())));
+
+        CamelContext context = new DefaultCamelContext(registry);
+        context.start();
+
+        InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(context, 
"bean:myBean::get");
+        assertNotNull(is);
+
+        String text = context.getTypeConverter().convertTo(String.class, is);
+        assertNotNull(text);
+        assertEquals(text, "a");
+        is.close();
+
+        context.stop();
+    }
+
+    public void testLoadBeanDoubleColonLong() throws Exception {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("my.company.MyClass", new 
AtomicReference<InputStream>(new ByteArrayInputStream("a".getBytes())));
+
+        CamelContext context = new DefaultCamelContext(registry);
+        context.start();
+
+        InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(context, 
"bean:my.company.MyClass::get");
+        assertNotNull(is);
+
+        String text = context.getTypeConverter().convertTo(String.class, is);
+        assertNotNull(text);
+        assertEquals(text, "a");
+        is.close();
+
+        context.stop();
+    }
+
+    public void testLoadBeanDot() throws Exception {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("myBean", new AtomicReference<InputStream>(new 
ByteArrayInputStream("a".getBytes())));
+
+        CamelContext context = new DefaultCamelContext(registry);
+        context.start();
+
+        InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(context, 
"bean:myBean.get");
+        assertNotNull(is);
+
+        String text = context.getTypeConverter().convertTo(String.class, is);
+        assertNotNull(text);
+        assertEquals(text, "a");
+        is.close();
+
+        context.stop();
+    }
+
     public void testLoadClasspathDefault() throws Exception {
         CamelContext context = new DefaultCamelContext();
         context.start();


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Bean language: support bean::function notation
> ----------------------------------------------
>
>                 Key: CAMEL-12079
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12079
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Luca Burgazzoli
>            Priority: Minor
>             Fix For: 2.22.0
>
>
> As today the bean language supports:
> - bean?function
> - bean.function
> it would be nice if we support also
> -  bean::function



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to