Независимо от того, используется ли я Oracle JDK, IBM JDK или Open JDK (все версии 8), я заметил, что следующий метод всегда возвращается null
, когда класс идет речь, является JDK библиотека классов:Где я могу найти спецификацию метода Class.getProtectionDomain(). GetCodeSource()?
Class clazz = Integer.class;
CodeSource codeSource = clazz.getProtectionDomain().getCodeSource();
Что я хотел бы знать, так это то, является ли факт, что это null для набора классов (а именно классов, предоставленных JDK), где-то указано (в отличие от того, что оно является общепринятым значением для эти классы, определенные различными исполнителями).
Однако я не могу найти, где это будет указано. Я уже проверил следующие источники и не нашел ни одного упоминания там:
- В Java SE 8 JLS
- Java-SE 8 JVM Spec
- JSR-115 (JavaTM Authorization контракт на контейнеры 1.5)
Где указано это поведение? Или это действительно не указано и «счастливое совпадение», что все три реализации JVM имеют одинаковое поведение?
(Бонусные баллы, если вы можете объяснить, как это неявно указано в результате других спецификаций, которые я подозреваю, дело!)
Голосование, потому что оно объясняет поведение - однако * не * обозначает ответ, потому что он не отвечает на вопрос («Где я могу найти спецификацию метода Class.getProtectionDomain(). GetCodeSource() ? ") – Marco
Похоже, что он, к сожалению, не указан нигде ..:/ – Marco
@Marco http://docs.oracle.com/javase/8/docs/technotes/guides/security/spec/security-spec.doc4.html # a21491 только там. Идея заключается в том, что спецификация не охватывает все возможные методы, но понятия. Таким образом, частью домена, который отвечает за источник, который загружается загрузчиком классов, является CodeSource: url + keychains. CodeSource может быть нулевым, когда оба они отсутствуют, это именно то, что происходит для системных классов – qwwdfsad