[
https://issues.apache.org/jira/browse/CAMEL-11999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16247172#comment-16247172
]
ASF GitHub Bot commented on CAMEL-11999:
----------------------------------------
oscerd closed pull request #2087: [CAMEL-11999] Cannot create queue/message for
Azure
URL: https://github.com/apache/camel/pull/2087
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/components/camel-azure/pom.xml b/components/camel-azure/pom.xml
index d8e94daca95..1e7c7aacdb1 100644
--- a/components/camel-azure/pom.xml
+++ b/components/camel-azure/pom.xml
@@ -62,6 +62,11 @@
<artifactId>camel-test-spring</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git
a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java
b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java
index 42bd47df930..572989c6333 100644
---
a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java
+++
b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java
@@ -42,15 +42,20 @@ protected Endpoint createEndpoint(String uri, String
remaining, Map<String, Obje
if (remaining != null) {
parts = remaining.split("/");
}
- if (parts == null || parts.length < 2) {
- throw new IllegalArgumentException("The account and queue names
must be specified.");
- }
- if (parts.length > 2) {
+ if (parts == null || parts.length < 1)
+ throw new IllegalArgumentException("The account name must be
specified.");
+
+ QueueServiceOperations operation = configuration.getOperation();
+ if (operation != null && operation !=
QueueServiceOperations.listQueues && parts.length < 2)
+ throw new IllegalArgumentException("The queue name must be
specified.");
+
+ if (parts.length > 2)
throw new IllegalArgumentException("Only the account and queue
names must be specified.");
- }
configuration.setAccountName(parts[0]);
- configuration.setQueueName(parts[1]);
+
+ if (parts.length > 1)
+ configuration.setQueueName(parts[1]);
checkCredentials(configuration);
diff --git
a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java
b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java
index e85cd2c029f..699e013762c 100644
---
a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java
+++
b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java
@@ -16,11 +16,12 @@
*/
package org.apache.camel.component.azure.queue;
-import com.microsoft.azure.storage.queue.CloudQueue;
import org.apache.camel.component.azure.common.AbstractConfiguration;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
+import com.microsoft.azure.storage.queue.CloudQueue;
+
@UriParams
public class QueueServiceConfiguration extends AbstractConfiguration {
diff --git
a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceUtil.java
b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceUtil.java
index 6f094184cfd..9669dbe762c 100644
---
a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceUtil.java
+++
b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceUtil.java
@@ -31,19 +31,12 @@ private QueueServiceUtil() {
}
public static URI prepareStorageQueueUri(QueueServiceConfiguration cfg) {
- return prepareStorageQueueUri(cfg, true);
- }
-
- public static URI prepareStorageQueueUri(QueueServiceConfiguration cfg,
boolean isForMessages) {
StringBuilder uriBuilder = new StringBuilder();
uriBuilder.append("https://")
.append(cfg.getAccountName())
.append(QueueServiceConstants.SERVICE_URI_SEGMENT)
- .append("/")
- .append(cfg.getQueueName());
- if (isForMessages) {
- uriBuilder.append("/messages");
- }
+ .append("/" + cfg.getQueueName());
+
return URI.create(uriBuilder.toString());
}
@@ -73,7 +66,9 @@ public static StorageCredentials
getAccountCredentials(QueueServiceConfiguration
public static void retrieveMessage(Exchange exchange,
QueueServiceConfiguration cfg) throws Exception {
CloudQueue client = createQueueClient(cfg);
QueueServiceRequestOptions opts = getRequestOptions(exchange);
- CloudQueueMessage message =
client.retrieveMessage(cfg.getMessageVisibilityDelay(),
+ int visibilityTimeout = cfg.getMessageVisibilityDelay();
+ visibilityTimeout = visibilityTimeout != 0 ? visibilityTimeout : 30;
+ CloudQueueMessage message = client.retrieveMessage(visibilityTimeout,
opts.getRequestOpts(), opts.getOpContext());
ExchangeUtil.getMessageForResponse(exchange).setBody(message);
}
diff --git
a/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceComponentConfigurationTest.java
b/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceComponentConfigurationTest.java
index ac3e3c165d5..111812d03d9 100644
---
a/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceComponentConfigurationTest.java
+++
b/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceComponentConfigurationTest.java
@@ -136,10 +136,10 @@ public void testTooManyPathSegments() throws Exception {
public void testTooFewPathSegments() throws Exception {
QueueServiceComponent component = new QueueServiceComponent(context);
try {
- component.createEndpoint("azure-queue://camelazure");
+
component.createEndpoint("azure-queue://camelazure?operation=addMessage");
fail();
} catch (IllegalArgumentException ex) {
- assertEquals("The account and queue names must be specified.",
ex.getMessage());
+ assertEquals("The queue name must be specified.", ex.getMessage());
}
}
diff --git
a/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceProducerTest.java
b/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceProducerTest.java
new file mode 100644
index 00000000000..bc3107f80a6
--- /dev/null
+++
b/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceProducerTest.java
@@ -0,0 +1,116 @@
+/**
+ * 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.azure.queue;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.JndiRegistry;
+import org.junit.Assert;
+import org.junit.Assume;
+import org.junit.Test;
+
+import com.microsoft.azure.storage.OperationContext;
+import com.microsoft.azure.storage.StorageCredentials;
+import com.microsoft.azure.storage.StorageCredentialsAccountAndKey;
+import com.microsoft.azure.storage.queue.CloudQueue;
+import com.microsoft.azure.storage.queue.CloudQueueMessage;
+
+public class QueueServiceProducerTest {
+
+ private static final String AZURE_STORAGE_QUEUE = "AZURE_STORAGE_QUEUE";
+
+ @Test
+ public void testAppendQueue() throws Exception {
+
+ StorageCredentials creds = getStorageCredentials("camelqueue",
System.getenv(AZURE_STORAGE_QUEUE));
+ Assume.assumeNotNull("Credentials not null", creds);
+
+ OperationContext.setLoggingEnabledByDefault(true);
+
+ CamelContext camelctx = createCamelContext(creds);
+ camelctx.addRoutes(new RouteBuilder() {
+ public void configure() throws Exception {
+ from("direct:createQueue")
+
.to("azure-queue://camelqueue/queue1?credentials=#creds&operation=createQueue");
+
+ from("direct:listQueues")
+
.to("azure-queue://camelqueue?credentials=#creds&operation=listQueues");
+
+ from("direct:deleteQueue")
+
.to("azure-queue://camelqueue/queue1?credentials=#creds&operation=deleteQueue");
+
+ from("direct:addMessage")
+
.to("azure-queue://camelqueue/queue1?credentials=#creds&operation=addMessage");
+
+ from("direct:retrieveMessage")
+
.to("azure-queue://camelqueue/queue1?credentials=#creds&operation=retrieveMessage");
+ }
+ });
+
+ camelctx.start();
+ try {
+ ProducerTemplate producer = camelctx.createProducerTemplate();
+
+ Iterator<?> it = producer.requestBody("direct:listQueues", null,
Iterable.class).iterator();
+ Assert.assertFalse("No more queues", it.hasNext());
+
+ producer.sendBody("direct:addMessage", "SomeMsg");
+
+ it = producer.requestBody("direct:listQueues", null,
Iterable.class).iterator();
+ Assert.assertTrue("Has queues", it.hasNext());
+ CloudQueue queue = (CloudQueue) it.next();
+ Assert.assertEquals("queue1", queue.getName());
+ Assert.assertFalse("No more queues", it.hasNext());
+
+ try {
+ CloudQueueMessage msg =
producer.requestBody("direct:retrieveMessage", null, CloudQueueMessage.class);
+ Assert.assertNotNull("Retrieve a message", msg);
+ Assert.assertEquals("SomeMsg",
msg.getMessageContentAsString());
+ } finally {
+ queue.delete();
+ }
+
+ } finally {
+ camelctx.stop();
+ }
+ }
+
+ private StorageCredentials getStorageCredentials(String account, String
key) {
+ return key != null ? new StorageCredentialsAccountAndKey(account, key)
: null;
+ }
+
+ private CamelContext createCamelContext(StorageCredentials credentials)
throws Exception {
+ JndiRegistry registry = new JndiRegistry(createJndiContext());
+ registry.bind("creds", credentials);
+ return new DefaultCamelContext(registry);
+ }
+
+ private Context createJndiContext() throws Exception {
+ Properties properties = new Properties();
+ properties.put("java.naming.factory.initial",
"org.apache.camel.util.jndi.CamelInitialContextFactory");
+ return new InitialContext(new Hashtable<Object, Object>(properties));
+ }
+}
\ No newline at end of file
diff --git
a/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceUtilTest.java
b/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceUtilTest.java
index 40bf2a4d0f2..85a7216433f 100644
---
a/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceUtilTest.java
+++
b/components/camel-azure/src/test/java/org/apache/camel/component/azure/queue/QueueServiceUtilTest.java
@@ -32,42 +32,34 @@
@Test
public void testPrepareUri() throws Exception {
registerCredentials();
-
+
QueueServiceComponent component = new QueueServiceComponent(context);
- QueueServiceEndpoint endpoint =
- (QueueServiceEndpoint)
component.createEndpoint("azure-queue://camelazure/testqueue?credentials=#creds");
- URI uri =
-
QueueServiceUtil.prepareStorageQueueUri(endpoint.getConfiguration());
-
assertEquals("https://camelazure.queue.core.windows.net/testqueue/messages",
uri.toString());
+ QueueServiceEndpoint endpoint = (QueueServiceEndpoint)
component.createEndpoint("azure-queue://camelazure/testqueue?credentials=#creds");
+ URI uri =
QueueServiceUtil.prepareStorageQueueUri(endpoint.getConfiguration());
+ assertEquals("https://camelazure.queue.core.windows.net/testqueue",
uri.toString());
}
@Test
public void testGetConfiguredClient() throws Exception {
- CloudQueue client =
- new
CloudQueue(URI.create("https://camelazure.queue.core.windows.net/testqueue/messages"),
- newAccountKeyCredentials());
-
+ CloudQueue client = new
CloudQueue(URI.create("https://camelazure.queue.core.windows.net/testqueue"),
newAccountKeyCredentials());
JndiRegistry registry = (JndiRegistry)
((PropertyPlaceholderDelegateRegistry) context.getRegistry()).getRegistry();
registry.bind("azureQueueClient", client);
-
+
QueueServiceComponent component = new QueueServiceComponent(context);
- QueueServiceEndpoint endpoint =
- (QueueServiceEndpoint)
component.createEndpoint("azure-queue://camelazure/testqueue?azureQueueClient=#azureQueueClient");
+ QueueServiceEndpoint endpoint = (QueueServiceEndpoint)
component.createEndpoint("azure-queue://camelazure/testqueue?azureQueueClient=#azureQueueClient");
assertSame(client,
QueueServiceUtil.getConfiguredClient(endpoint.getConfiguration()));
}
+
@Test
public void testGetConfiguredClientUriMismatch() throws Exception {
- CloudQueue client =
- new
CloudQueue(URI.create("https://camelazure.queue.core.windows.net/testqueue"),
- newAccountKeyCredentials());
-
+ CloudQueue client = new
CloudQueue(URI.create("https://camelazure.queue.core.windows.net/testqueue"),
newAccountKeyCredentials());
+
JndiRegistry registry = (JndiRegistry)
((PropertyPlaceholderDelegateRegistry) context.getRegistry()).getRegistry();
registry.bind("azureQueueClient", client);
-
+
QueueServiceComponent component = new QueueServiceComponent(context);
- QueueServiceEndpoint endpoint =
- (QueueServiceEndpoint)
component.createEndpoint("azure-queue://camelazure/testqueue2?azureQueueClient=#azureQueueClient");
-
+ QueueServiceEndpoint endpoint = (QueueServiceEndpoint)
component.createEndpoint("azure-queue://camelazure/testqueue2?azureQueueClient=#azureQueueClient");
+
try {
QueueServiceUtil.getConfiguredClient(endpoint.getConfiguration());
fail();
@@ -82,7 +74,6 @@ private void registerCredentials() {
}
private StorageCredentials newAccountKeyCredentials() {
- return new StorageCredentialsAccountAndKey("camelazure",
-
Base64.encode("key".getBytes()));
+ return new StorageCredentialsAccountAndKey("camelazure",
Base64.encode("key".getBytes()));
}
}
diff --git a/components/camel-azure/src/test/resources/log4j.properties
b/components/camel-azure/src/test/resources/log4j.properties
new file mode 100644
index 00000000000..6b2698af632
--- /dev/null
+++ b/components/camel-azure/src/test/resources/log4j.properties
@@ -0,0 +1,36 @@
+###
+# #%L
+# Wildfly Camel :: Testsuite
+# %%
+# Copyright (C) 2013 - 2014 RedHat
+# %%
+# Licensed 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.
+# #L%
+###
+
+# Root logger option
+log4j.rootLogger=DEBUG, file, console
+
+# Direct log messages to a log file
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.file=target/test.log
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c]
(%t) - %m%n
+log4j.appender.file.threshold=DEBUG
+
+# Direct log messages to console
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.out
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p
[%c] (%t) - %m%n
+log4j.appender.console.threshold=WARN
----------------------------------------------------------------
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]
> Cannot create queue/message for Azure
> -------------------------------------
>
> Key: CAMEL-11999
> URL: https://issues.apache.org/jira/browse/CAMEL-11999
> Project: Camel
> Issue Type: Bug
> Components: camel-azure
> Affects Versions: 2.20.0
> Reporter: Thomas Diesler
> Assignee: Thomas Diesler
> Fix For: 2.20.1, 2.21.0
>
>
> The Azure Storage Queue API may have changed unnoticed since the component
> was incepted.
> Currently it is broken in multiple places.
> CrossRef: https://github.com/wildfly-extras/wildfly-camel/issues/1819
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)