diff --git a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/ServiceBusManagementSerializer.java b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/ServiceBusManagementSerializer.java index 95c6be15c47e..7e1032bfb1f7 100644 --- a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/ServiceBusManagementSerializer.java +++ b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/ServiceBusManagementSerializer.java @@ -31,6 +31,9 @@ public class ServiceBusManagementSerializer implements SerializerAdapter { Pattern.MULTILINE); private static final Pattern FILTER_ACTION_PATTERN = Pattern.compile("<(Filter|Action) type=", Pattern.MULTILINE); + private static final Pattern FILTER_VALUE_PATTERN = Pattern.compile("<(Value)", + Pattern.MULTILINE); + private static final String RULE_VALUE_ATTRIBUTE_XML = "<$1 xmlns:d6p1=\"http://www.w3.org/2001/XMLSchema\" ns0:type=\"d6p1:string\""; private final JacksonAdapter jacksonAdapter = new JacksonAdapter(); private final ClientLogger logger = new ClientLogger(ServiceBusManagementSerializer.class); @@ -56,7 +59,7 @@ public String serialize(Object object, SerializerEncoding encoding) throws IOExc } final String namespace = namespaceMatcher.group("namespace"); - final String replaced = contents + String replaced = contents .replaceAll(namespace + ":", "") .replace("xmlns:" + namespace + "=", "xmlns="); @@ -64,6 +67,17 @@ public String serialize(Object object, SerializerEncoding encoding) throws IOExc return replaced; } + // This hack is here because value of custom property within RuleFilter should have a namespace like xmlns:d6p1="http://www.w3.org/2001/XMLSchema" ns0:type="d6p1:string". + if (CreateRuleBody.class.equals(clazz)) { + final Matcher filterValue = FILTER_VALUE_PATTERN.matcher(replaced); + if (filterValue.find()) { + replaced = filterValue.replaceAll(RULE_VALUE_ATTRIBUTE_XML); + } else { + logger.warning("Could not find filter name pattern '{}' in {}.", FILTER_VALUE_PATTERN.pattern(), + contents); + } + } + // This hack is here because RuleFilter and RuleAction type="Foo" should have a namespace like n0:type="Foo". final Matcher filterType = FILTER_ACTION_PATTERN.matcher(replaced); if (filterType.find()) { diff --git a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/CorrelationFilterImpl.java b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/CorrelationFilterImpl.java index fdcf4f72f73e..fdae2788d47a 100644 --- a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/CorrelationFilterImpl.java +++ b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/CorrelationFilterImpl.java @@ -85,11 +85,11 @@ public final class CorrelationFilterImpl extends RuleFilterImpl { private String contentType; private static final class PropertiesWrapper { - @JacksonXmlProperty(localName = "KeyValueOfstringanyType") + @JacksonXmlProperty(localName = "KeyValueOfstringanyType", namespace = "http://schemas.microsoft.com/netservices/2010/10/servicebus/connect") private final List items; @JsonCreator - private PropertiesWrapper(@JacksonXmlProperty(localName = "KeyValueOfstringanyType") List items) { + private PropertiesWrapper(@JacksonXmlProperty(localName = "KeyValueOfstringanyType", namespace = "http://schemas.microsoft.com/netservices/2010/10/servicebus/connect") List items) { this.items = items; } } diff --git a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlFilterImpl.java b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlFilterImpl.java index 236ada8a9ccd..f3f7410a7829 100644 --- a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlFilterImpl.java +++ b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlFilterImpl.java @@ -46,11 +46,11 @@ public class SqlFilterImpl extends RuleFilterImpl { private String compatibilityLevel; private static final class ParametersWrapper { - @JacksonXmlProperty(localName = "KeyValueOfstringanyType") + @JacksonXmlProperty(localName = "KeyValueOfstringanyType", namespace = "http://schemas.microsoft.com/netservices/2010/10/servicebus/connect") private final List items; @JsonCreator - private ParametersWrapper(@JacksonXmlProperty(localName = "KeyValueOfstringanyType") List items) { + private ParametersWrapper(@JacksonXmlProperty(localName = "KeyValueOfstringanyType", namespace = "http://schemas.microsoft.com/netservices/2010/10/servicebus/connect") List items) { this.items = items; } } diff --git a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlRuleActionImpl.java b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlRuleActionImpl.java index c4ab9eeb0b9e..803a45e9bf9b 100644 --- a/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlRuleActionImpl.java +++ b/sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/implementation/models/SqlRuleActionImpl.java @@ -37,11 +37,11 @@ public final class SqlRuleActionImpl extends RuleActionImpl { private String compatibilityLevel; private static final class ParametersWrapper { - @JacksonXmlProperty(localName = "KeyValueOfstringanyType") + @JacksonXmlProperty(localName = "KeyValueOfstringanyType", namespace = "http://schemas.microsoft.com/netservices/2010/10/servicebus/connect") private final List items; @JsonCreator - private ParametersWrapper(@JacksonXmlProperty(localName = "KeyValueOfstringanyType") List items) { + private ParametersWrapper(@JacksonXmlProperty(localName = "KeyValueOfstringanyType", namespace = "http://schemas.microsoft.com/netservices/2010/10/servicebus/connect") List items) { this.items = items; } }