You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "DOAN DuyHai (JIRA)" <ji...@apache.org> on 2016/03/21 16:09:25 UTC

[jira] [Created] (CASSANDRA-11391) "class declared as inner class" error when using UDF

DOAN DuyHai created CASSANDRA-11391:
---------------------------------------

             Summary: "class declared as inner class" error when using UDF
                 Key: CASSANDRA-11391
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11391
             Project: Cassandra
          Issue Type: Bug
          Components: CQL
         Environment: C* 3.4
            Reporter: DOAN DuyHai
            Priority: Critical


{noformat}
cqlsh:music> CREATE FUNCTION testMapEntry(my_map map<text, text>)
         ... CALLED ON NULL INPUT
         ... RETURNS text
         ... LANGUAGE java
         ... AS $$
         ...     String buffer = "";
         ...     for(java.util.Map.Entry<String, String> entry: my_map.entrySet()) {
         ...         buffer = buffer + entry.getKey() + ": " + entry.getValue() + ", ";
         ...     }
         ...     return buffer;
         ... $$;
InvalidRequest: code=2200 [Invalid query] 
message="Could not compile function 'music.testmapentry' from Java source: 
org.apache.cassandra.exceptions.InvalidRequestException: 
Java UDF validation failed: [class declared as inner class]"
{noformat}

When I try to decompile the source code into byte code, below is the result:

{noformat}
  public java.lang.String test(java.util.Map<java.lang.String, java.lang.String>);
    Code:
       0: ldc           #2                  // String
       2: astore_2
       3: aload_1
       4: invokeinterface #3,  1            // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
       9: astore_3
      10: aload_3
      11: invokeinterface #4,  1            // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
      16: astore        4
      18: aload         4
      20: invokeinterface #5,  1            // InterfaceMethod java/util/Iterator.hasNext:()Z
      25: ifeq          94
      28: aload         4
      30: invokeinterface #6,  1            // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      35: checkcast     #7                  // class java/util/Map$Entry
      38: astore        5
      40: new           #8                  // class java/lang/StringBuilder
      43: dup
      44: invokespecial #9                  // Method java/lang/StringBuilder."<init>":()V
      47: aload_2
      48: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      51: aload         5
      53: invokeinterface #11,  1           // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
      58: checkcast     #12                 // class java/lang/String
      61: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      64: ldc           #13                 // String :
      66: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      69: aload         5
      71: invokeinterface #14,  1           // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
      76: checkcast     #12                 // class java/lang/String
      79: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      82: ldc           #15                 // String ,
      84: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      87: invokevirtual #16                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      90: astore_2
      91: goto          18
      94: aload_2
      95: areturn
{noformat}

 There is nothing that could trigger inner class creation ...



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)