2011-01-18 5 views
0

java rmiレジストリ内のリモートオブジェクトの名前にはどのようなものがありますか?禁止された文字はありますか?java rmiレジストリ内のリモートオブジェクトの名前にはどのようなものがありますか?

クラスnamamingのrebindメソッドを呼び出して、rmiレジストリ内のオブジェクトをバインドして、MalformedUrlExceptionを取得しようとしています。私はabcのような名前を使うと問題が起こることを知っているので、おそらくスタックトレースは必要ないでしょう。

名前は疑似ランダムに生成されています。たとえば、問題の原因となった名前の1つが[[email protected]です。あなたが好きな名前を使用する方法はありますか?そうでない場合は、許可された名前は何ですか?

これはapiが名前に関するルールを記述していないため、これは奇妙です。それはhereです。たぶん、[のような名前に表示される文字は、\でエスケープする必要があります。おそらくそれはjavaについてではなく、URL仕様に関するものであり、もしあれば、私はおそらく他の名前を使用する必要があります。

+0

私はちょうど不正な文字が本当に "["ですスタックトレースに気づいた "あなたはこれを回避する方法を知っていたり、何か答えを見たいのですが。 – Range

+0

なぜ 'toString()'の結果をバインド名として使用していますか?クライアントは生成されたバインド名をどのように発見するでしょうか? – EJP

答えて

1

APIは確かに制限については何も言いませんが、MalformedUrlExceptionを取得した場合、私が試してみたいのはURLEncodeです。

+0

ありがとうございました!それは、私はリストを取得してレジストリ内の名前をチェックし、レジストリでオブジェクトが参照される名前は、エンコーディングの前に、最初に生成された擬似ランダム名であることがわかりました。エンコーディングは、最終的に使用される名前をつぶすことなく問題を解決します。 – Range

1

javadocs状態:

名 - 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こととしなければならないことを意味します。

詳細については、コードをご覧ください。

+0

チップをありがとうございます。 – Range

関連する問題