Каковы возможные имена удаленных объектов в реестре Java RMI? - PullRequest
0 голосов
/ 18 января 2011

Каковы возможные имена удаленных объектов в реестре Java RMI? Есть ли запрещенные символы?

Я пытаюсь вызвать метод rebind класса Naming для привязки объекта в реестре rmi, и я получаю MalformedUrlException. Я знаю, что проблема заключается в имени объекта, потому что когда я использую имя типа abc, оно работает, поэтому вам, вероятно, не нужна трассировка стека для ответа.

Дело в том, что имя генерируется псевдослучайно. Например, одним из имен, вызвавших проблему, является [B@f3d6a5. Есть ли способ использовать любое имя, которое вам нравится, и если нет, то какие имена разрешены?

Это странно, потому что API не устанавливает никаких правил относительно имени, вы можете увидеть его здесь . Возможно, некоторые символы, которые появляются в именах, такие как [, должны быть экранированы с помощью \. Возможно, речь идет не о Java, а о спецификациях URL, если таковые имеются, и в этом случае мне, вероятно, придется использовать другие имена.

Ответы [ 2 ]

1 голос
/ 18 января 2011

Состояние javadocs :

name - имя в формате URL (без компонент схемы)

Если вы посмотрите на исходный код для Naming, вы увидите, что он конвертирует то, что вы передаете, в URI и выдает MalformedURLException при определенных условиях.

private static ParsedNamingURL intParseURL(String str)
    throws MalformedURLException, URISyntaxException
{
    URI uri = new URI(str);
    if (uri.isOpaque()) {
        throw new MalformedURLException(
        "not a hierarchical URL: " + str);
    }
    if (uri.getFragment() != null) {
        throw new MalformedURLException(
        "invalid character, '#', in URL name: " + str);
    } else if (uri.getQuery() != null) {
        throw new MalformedURLException(
        "invalid character, '?', in URL name: " + str);
    } else if (uri.getUserInfo() != null) {
        throw new MalformedURLException(
        "invalid character, '@', in URL host: " + str);
    }

Это означает, что имя должно быть действительным URI и, кроме того, не может содержать #, ? или @.

Посмотрите код самостоятельно для получения более подробной информации.

1 голос
/ 18 января 2011

API, конечно, ничего не говорит об ограничениях, но если вы получите MalformedUrlException, я бы попробовал URLEncode случайно сгенерированных имен.

...