2016-02-19 2 views
2

Я как бы новичок в Java, и я сталкиваюсь с проблемой при запуске события. У меня есть способ запускать (создать) событие, которое вызывает функцию eclipse. Org.osgi.service.event.Event.Event (String topic, Свойства карты)org.osgi.service.event.Event.validateTopicName ограничено некоторыми символами

Теперь этот метод вызывает функцию private static void validateTopicName (String topic) для проверки имени предоставленной темы. На самом деле, я использую какой-то символ по имени, чтобы они переходили к параметру темы (например, «[»). В validateTopicName есть валидация для темы только для определенных символов (i.e. "A-Z,a-z,0-9,-,_ "), поэтому она бросает ошибку java.lang.IllegalArgumentException. Я хочу знать, почему существует ограничение некоторых символов в вышеуказанном методе? И как я могу преодолеть ? этого вопроса

`

private static void validateTopicName(String topic) { 
     char[] chars = topic.toCharArray(); 
     int length = chars.length; 
     if (length == 0) { 
      throw new IllegalArgumentException("empty topic"); 
     } 
     for (int i = 0; i < length; i++) { 
      char ch = chars[i]; 
      if (ch == '/') { 
       // Can't start or end with a '/' but anywhere else is okay 
       if (i == 0 || (i == length - 1)) { 
        throw new IllegalArgumentException("invalid topic: " 
          + topic); 
       } 
       // Can't have "//" as that implies empty token 
       if (chars[i - 1] == '/') { 
        throw new IllegalArgumentException("invalid topic: " 
          + topic); 
       } 
       continue; 
      } 
      if (('A' <= ch) && (ch <= 'Z')) { 
       continue; 
      } 
      if (('a' <= ch) && (ch <= 'z')) { 
       continue; 
      } 
      if (('0' <= ch) && (ch <= '9')) { 
       continue; 
      } 
      if ((ch == '_') || (ch == '-')) { 
       continue; 
      } 
      throw new IllegalArgumentException("invalid topic: " + topic); 
     } 
    }` 

ответ

1

формат темы событий определяется в спецификации OSGi (раздел 113.3.1 на OSGi Сборнике):

topic ::= token ('/' token) * 

token ::= (alphanum | '_' | '-')+ 

alphanum ::= ::= alpha | digit 

digit ::= [0..9] 

alpha ::= [a..zA..Z] 

Вам нужно будет преобразовать свои темы, чтобы соответствовать этому.

+0

Thanks Greg, Но я не могу преобразовать свои темы, удалив символы, поскольку это может вызвать проблему при чтении слушателя. – Jaydeep

+0

@Jaydeep, если вы хотите использовать эти события, у вас нет выбора. Вы не можете подорвать эту спецификацию. –

+0

Возможно, вы могли бы использовать действительную тему и помещать свой недопустимый раздел в аргумент свойств. –

Смежные вопросы