かかわらず、私はOracleのJDK、IBM JDKまたはOpen JDK(すべてのバージョン8)を使用するかどうか、私は問題のクラスは、JDKライブラリクラスである場合は、次のメソッドは、常にnull
を返していることに気づいの:Class.getProtectionDomain()。getCodeSource()メソッドの仕様はどこにありますか?
Class clazz = Integer.class;
CodeSource codeSource = clazz.getProtectionDomain().getCodeSource();
私が知りたいのですが、それはのための時に一般的に合意された値であることとは対照的に、これはクラスのセットのためにnullであるという事実は(つまり、クラスはJDKによって提供される)(どこかに指定されているか否かである
これらのクラスは、さまざまな実装者によって決定されます)。
しかし、これがどこで指定されるのかわかりません。私はすでに次のソースをチェックしましたし、そこに一切の言及を発見していない:
- のJava SE 8 JLSは
- のJava SE 8 JVMスペックは
- JSR-115(コンテナ1.5用のJavaTM認証契約)この動作が指定されている
?または、実際には指定されておらず、3つのJVM実装の動作がすべて同じであるという「幸せな一致」ですか?
(ボーナスポイントあなたはこれが暗黙のうちに私がそうである疑いがあるその他の仕様、結果として指定されている方法を説明できるかどうか!)
それが行動を説明するため、最大投票 - 。しかし、* *答えとしてマーキングではない、それは* *質問(「私は(Class.getProtectionDomainの仕様を見つけることができます)getCodeSource()メソッドに応答しないので、 ? ") – Marco
それは残念ながらどこにも指定されていないように見えます..:/ – Marco
@Marco http://docs.oracle.com/javase/8/docs/technotes/guides/security/spec/security-spec.doc4.html #a21491だけあります。アイデアは、specはすべての可能な方法をカバーするのではなく、概念をカバーしているということです。したがって、クラスローダーによってロードされたソースを担当するドメインの一部は、CodeSource:url + keychainsです。 CodeSourceは、どちらも存在しない場合はnullでもかまいません。システムクラスの場合はまさにそれが起こります。 – qwwdfsad