public class CodebaseAwareObjectInputStream extends ConfigurableObjectInputStream
JDK の RMIClassLoader を使用して、指定されたコードベースからクラスをロードします。コードベースは、スペースで区切られた複数の URL で構成できます。標準 RMI で動的クラスダウンロードを使用する場合と同様に、RMIClassLoader では SecurityManager を設定する必要があることに注意してください。(詳細については、RMI のドキュメントを参照してください。)
このクラスは RMI パッケージに存在しますが、RmiClientInterceptor では使用されません。代わりに標準の RMI インフラストラクチャが使用されるため、"java.rmi.server.codebase" 経由の RMI の標準動的クラスのダウンロードにのみ依存できます。CodebaseAwareObjectInputStream は HttpInvokerClientInterceptor によって使用されます ( "codebaseUrl" プロパティを参照してください)。
オプションを提案し、プロトタイプを提供してくれた Lionel Mestre に感謝します。
RMIClassLoader
, RemoteInvocationSerializingExporter.createObjectInputStream(java.io.InputStream)
, HttpInvokerClientInterceptor.setCodebaseUrl(java.lang.String)
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
コンストラクターと説明 |
---|
CodebaseAwareObjectInputStream(java.io.InputStream in, java.lang.ClassLoader classLoader, boolean acceptProxyClasses) 指定された InputStream とコードベースの新しい CodebaseAwareObjectInputStream を作成します。 |
CodebaseAwareObjectInputStream(java.io.InputStream in, java.lang.ClassLoader classLoader, java.lang.String codebaseUrl) 指定された InputStream とコードベースの新しい CodebaseAwareObjectInputStream を作成します。 |
CodebaseAwareObjectInputStream(java.io.InputStream in, java.lang.String codebaseUrl) 指定された InputStream とコードベースの新しい CodebaseAwareObjectInputStream を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected java.lang.ClassLoader | getFallbackClassLoader() ClassLoader が指定されておらず、ObjectInputStream 自身のデフォルトクラスローダーが失敗した場合に使用するフォールバック ClassLoader を返します。 |
protected java.lang.Class<?> | resolveFallbackIfPossible(java.lang.String className, java.lang.ClassNotFoundException ex) フォールバッククラスローダーに対して指定されたクラス名を解決します。 |
resolveClass, resolveProxyClass
available, close, defaultReadObject, enableResolveObject, read, read, readBoolean, readByte, readChar, readClassDescriptor, readDouble, readFields, readFloat, readFully, readFully, readInt, readLine, readLong, readObject, readObjectOverride, readShort, readStreamHeader, readUnshared, readUnsignedByte, readUnsignedShort, readUTF, registerValidation, resolveObject, skipBytes
public CodebaseAwareObjectInputStream(java.io.InputStream in, java.lang.String codebaseUrl) throws java.io.IOException
in
- 読み込み元の InputStreamcodebaseUrl
- ローカルに見つからない場合にクラスをロードするコードベース URL (スペースで区切られた複数の URL で構成できます)java.io.IOException
ObjectInputStream.ObjectInputStream(java.io.InputStream)
public CodebaseAwareObjectInputStream(java.io.InputStream in, @Nullable java.lang.ClassLoader classLoader, java.lang.String codebaseUrl) throws java.io.IOException
in
- 読み込み元の InputStreamclassLoader
- ローカルクラスのロードに使用する ClassLoader (RMI のデフォルトの ClassLoader を示す null
)codebaseUrl
- ローカルに見つからない場合にクラスをロードするコードベース URL (スペースで区切られた複数の URL で構成できます)java.io.IOException
ObjectInputStream.ObjectInputStream(java.io.InputStream)
public CodebaseAwareObjectInputStream(java.io.InputStream in, @Nullable java.lang.ClassLoader classLoader, boolean acceptProxyClasses) throws java.io.IOException
in
- 読み込み元の InputStreamclassLoader
- ローカルクラスのロードに使用する ClassLoader (RMI のデフォルトの ClassLoader を示す null
)acceptProxyClasses
- プロキシクラスの逆直列化を受け入れるかどうか (セキュリティ対策として無効にすることができます)java.io.IOException
ObjectInputStream.ObjectInputStream(java.io.InputStream)
protected java.lang.Class<?> resolveFallbackIfPossible(java.lang.String className, java.lang.ClassNotFoundException ex) throws java.io.IOException, java.lang.ClassNotFoundException
ConfigurableObjectInputStream
デフォルトの実装では、利用可能なフォールバックがないため、元の例外が単に再スローされます。
ConfigurableObjectInputStream
の resolveFallbackIfPossible
className
- 解決するクラス名 ex
- クラスをロードしようとしたときにスローされた元の例外 null
)java.io.IOException
java.lang.ClassNotFoundException
protected java.lang.ClassLoader getFallbackClassLoader() throws java.io.IOException
ConfigurableObjectInputStream
デフォルトの実装は null
を返すだけで、特定のフォールバックが利用できないことを示します。
ConfigurableObjectInputStream
の getFallbackClassLoader
java.io.IOException