[
https://issues.apache.org/jira/browse/NIFI-1686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15215930#comment-15215930
]
ASF GitHub Bot commented on NIFI-1686:
--------------------------------------
Github user olegz commented on a diff in the pull request:
https://github.com/apache/nifi/pull/305#discussion_r57714484
--- Diff:
nifi-nar-bundles/nifi-amqp-bundle/nifi-amqp-processors/src/main/java/org/apache/nifi/amqp/processors/AMQPUtils.java
---
@@ -141,4 +142,101 @@ private static String
extractPropertyNameFromMethod(Method method) {
c[0] = Character.toLowerCase(c[0]);
return AMQP_PROP_PREFIX + new String(c);
}
+
+ /**
+ * Will validate if provided amqpPropValue can be converted to a
{@link Map}.
+ *
+ * @param amqpPropValue
+ * the value of the property
+ * @return {@link Map} if valid otherwise null
+ */
+ public static Map<String, Object> validateAMQPHeaderProperty(String
amqpPropValue){
+ String[] strEntries = amqpPropValue.split(",");
+ Map<String, Object> headers = new HashMap<>();
+ for (String strEntry : strEntries) {
+ String[] kv = strEntry.split("=");
+ if (kv.length == 2) {
+ headers.put(kv[0].trim(), kv[1].trim());
+ } else {
+ logger.warn("Malformed key value pair for AMQP header
property: " + amqpPropValue);
+ }
+ }
+
+ return headers;
+ }
+
+ /**
+ * Will validate if provided amqpPropValue can be converted to an
{@link Integer}, and that its
+ * value is 1 or 2.
+ *
+ * @param amqpPropValue
+ * the value of the property
+ * @return {@link Integer} if valid otherwise null
+ */
+ public static Integer validateAMQPDeliveryModeProperty(String
amqpPropValue){
+ Integer deliveryMode = null;
+
+ try {
+ deliveryMode = Integer.parseInt(amqpPropValue);
+ } catch (NumberFormatException aE){
+ //we will deal with the error below instead of having
duplicate logger code
+ }
--- End diff --
Consider ```private static Integer toInt(String strVal)``` method, since
the same logic is repeated in the next one. Just trying to avoid duplication as
much as possible.
> NiFi is unable to populate over 1/4 of AMQP properties from flow properties
> ---------------------------------------------------------------------------
>
> Key: NIFI-1686
> URL: https://issues.apache.org/jira/browse/NIFI-1686
> Project: Apache NiFi
> Issue Type: Bug
> Components: Core Framework
> Affects Versions: 0.5.1
> Reporter: Stephen Harper
>
> When creating a flow (we used ListenHTTP, but this bug will affect all) that
> forwards on to a rabbit queue, org.apache.nifi.amqp.processors.PublishAMQP
> uses the method extractAmqpPropertiesFromFlowFile to populate the AMQP
> BasicProperties if the flow attributes match a certain format (i.e
> amqp$contentType=text/xml).
> The method in question uses reflection to find a matching method name from
> the AMQP.BasicProperties class, and tries to populate accordingly.
> This works fine for all properties that take a String argument - however
> there are some that don't (specifically, headers takes a Map<String, Object>,
> deliveryMode and priority take Integer, and timestamp takes a Date), and it
> is impossible to populate these values because the invocation assumes a
> String is required, and fails on line 210.
> Whatsmore, the comment underneath (line 215) states that "this should really
> never happen since it should be caught by the above IF" - however the author
> of the code mustn't have tested all cases because this error is consistently
> present when trying to forward flow attributes in over a quarter of the
> available amqp properties.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)