Я как бы новичок в 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);
}
}`
Thanks Greg, Но я не могу преобразовать свои темы, удалив символы, поскольку это может вызвать проблему при чтении слушателя. – Jaydeep
@Jaydeep, если вы хотите использовать эти события, у вас нет выбора. Вы не можете подорвать эту спецификацию. –
Возможно, вы могли бы использовать действительную тему и помещать свой недопустимый раздел в аргумент свойств. –