org.osgi.service.event.Event.validateTopicName限制了某些字符

时间:2016-02-19 05:30:16

标签: java eclipse

我是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);
        }
    }`

1 个答案:

答案 0 :(得分:1)

事件主题的格式在OSGi规范中定义(OSGi纲要第113.3.1节):

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

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

alphanum ::= ::= alpha | digit

digit ::= [0..9]

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

您必须转换主题以符合此要求。