我是Java的新手,我在解雇事件时遇到了问题。我有一个方法来激活(创建)一个调用eclipse函数的事件org.osgi.service.event.Event.Event(String topic,Map properties)
现在这个方法调用一个函数private static void validateTopicName(String topic)来验证提供的主题名称。
实际上我在名称中使用了一些符号,因此它们会传递给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);
}
}`
答案 0 :(得分:1)
事件主题的格式在OSGi规范中定义(OSGi纲要第113.3.1节):
topic ::= token ( '/' token ) *
token ::= ( alphanum | '_' | '-' )+
alphanum ::= ::= alpha | digit
digit ::= [0..9]
alpha ::= [a..zA..Z]
您必须转换主题以符合此要求。