CAMEL-9932: sql-stored - Add support for arrays in grammar so you can refer to arrays when using simple tokens.
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java
index 15a9347..8b3c31b 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java
@@ -291,7 +291,7 @@
             {
                case 10:
                case 14:
-                  if ((0x2ffffffe87fffffeL & l) == 0L)
+                  if ((0x2ffffffeaffffffeL & l) == 0L)
                      break;
                   if (kind > 14)
                      kind = 14;
@@ -302,7 +302,7 @@
                      jjCheckNAdd(8);
                   break;
                case 8:
-                  if ((0x2ffffffe87fffffeL & l) != 0L)
+                  if ((0x2ffffffeaffffffeL & l) != 0L)
                      jjCheckNAddTwoStates(8, 9);
                   break;
                case 9:
@@ -310,7 +310,7 @@
                      kind = 12;
                   break;
                case 12:
-                  if ((0x2ffffffe87fffffeL & l) == 0L)
+                  if ((0x2ffffffeaffffffeL & l) == 0L)
                      break;
                   if (kind > 13)
                      kind = 13;
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj
index d078591..bd3546f 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj
@@ -142,7 +142,7 @@
 }
 
 TOKEN: {
-    <#SPECIAL: (["#","_","-","'",".","$","{","}","\""])>
+    <#SPECIAL: (["#","_","-","'",".","$","{","}","\"","[","]"])>
 }
 
 TOKEN: {
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBodyArrayTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBodyArrayTest.java
new file mode 100644
index 0000000..c9612dc
--- /dev/null
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBodyArrayTest.java
@@ -0,0 +1,78 @@
+/**
+ * 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.sql.stored;
+
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
+
+public class ProducerBodyArrayTest extends CamelTestSupport {
+
+    EmbeddedDatabase db;
+
+    @Before
+    public void setUp() throws Exception {
+        db = new EmbeddedDatabaseBuilder()
+                .setType(EmbeddedDatabaseType.DERBY).addScript("sql/storedProcedureTest.sql").build();
+        super.setUp();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        super.tearDown();
+        db.shutdown();
+    }
+
+    @Test
+    public void shouldExecuteStoredProcedure() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.expectedMessageCount(1);
+
+        Integer[] numbers = new Integer[]{1, 2};
+        template.requestBody("direct:query", numbers);
+
+        assertMockEndpointsSatisfied();
+
+        Exchange exchange = mock.getExchanges().get(0);
+
+        assertEquals(Integer.valueOf(-1), exchange.getIn().getBody(Map.class).get("resultofsub"));
+        assertNotNull(exchange.getIn().getHeader(SqlStoredConstants.SQL_STORED_UPDATE_COUNT));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // required for the sql component
+                getContext().getComponent("sql-stored", SqlStoredComponent.class).setDataSource(db);
+
+                from("direct:query").to("sql-stored:SUBNUMBERS(INTEGER ${body[0]},INTEGER ${body[1]},OUT INTEGER resultofsub)").to("mock:query");
+            }
+        };
+    }
+
+}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java
index 8eb704b..0ff0c87 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java
@@ -52,7 +52,6 @@
         MockEndpoint mock = getMockEndpoint("mock:query");
         mock.expectedMessageCount(1);
 
-
         Map<String, Object> headers = new HashMap<>();
         headers.put("num1", 1);
         headers.put("num2", 2);