Удалить удвоенную косую черту в элементах ObjectName JMX

Это правило помечает потенциальное использование удвоенной косой черты ("//") в разделе домена конструкторов javax.management.ObjectName. В JSR 255 планируется использовать "//" в разделе домена javax.management.ObjectName как разделитель для "каскадности". Хотя JSR 255 не является частью Java SE 6, не рекомендуется, чтобы раздел домена в ObjectName содержал "//", во избежание несовместимости в будущем.

ObjectName имеет следующий формат:

domain:key1=value1,key2=value2,key3=value3,*

с переменным числом свойств ключ/значение.

Если в приложении есть объекты MBean с ObjectName, в которых имя домена содержит удвоенную косую черту, то необходимо изменить имя домена для таких MBean.

Это правило проверяет конструкторы ObjectName и по возможности проверяет раздел домена в строке на наличие удвоенных косых черт. Оно способно проверять конструкторы, в которые передаются литералы объектов String и переменные типа final String, определенные в том же модуле компиляции. Если есть возможность проверить имя домена, то помечаются только те конструкторы, которые нарушают правило.

Правило может также помечать экземпляры конструктора ObjectName, у которых имя домена указано переменной, и ее невозможно проверить. Такие экземпляры необходимо проверить вручную и убедиться, что имена доменов не содержат удвоенную косую черту.

Пример 1:

< span class="Code" > public MyClass {
import javax.management.ObjectName;

ObjectName myObj1 = ObjectName("domain//Name:key1=value1,*");
ObjectName myObj2 = ObjectName("domaiName", "key1", "value1");
Hashtable<String,String> myHashTable = new Hashtable<String,String>();
table.put("key1", "value1");
ObjectName myObj3 = ObjectName("domain//Name", myHashTable");
}

В примере 1 правило помечает myObj1 и myObj3, поскольку эти строки содержат "//". myObj2 помечен не будет.

Пример 2:

< span class="Code" > public MyClass {
import javax.management.ObjectName;

final String myDomainName = "domainName";
ObjectName myObj1 = ObjectName(myDomainName, "key1", "value1");

final String myObjectName = "domain//Name:key1=value1";
ObjectName myObj2 = ObjectName(myObjectName);
}

В примере 2 правило помечает myObj2, но не myObj1.

Пример 3:

< span class="Code" > public MyClass {
import javax.management.ObjectName;

private ObjectName getMyObjectName(String myObjectName){
ObjectName myObj = ObjectName(myObjectName);
}
}

В примере 3 помечается myObj, поскольку код не может определить имя домена.

Дополнительная информация: