@ProviderType
public interface WovenClass
WeavingHook
for possible modification. It allows access to the most
recently transformed class file bytes and to any additional packages that
should be added to the bundle as dynamic imports.
Upon entering one of the terminal states, this object becomes effectively immutable.
Modifier and Type | Field and Description |
---|---|
static int |
DEFINE_FAILED
The woven class failed to define.
|
static int |
DEFINED
The woven class has been defined.
|
static int |
TRANSFORMED
The woven class has been transformed.
|
static int |
TRANSFORMING
The woven class is being transformed.
|
static int |
TRANSFORMING_FAILED
The woven class failed to transform.
|
Modifier and Type | Method and Description |
---|---|
BundleWiring |
getBundleWiring()
Returns the bundle wiring whose class loader will define the woven class.
|
byte[] |
getBytes()
Returns the class file bytes to be used to define the
named class. |
java.lang.String |
getClassName()
Returns the fully qualified name of the class being woven.
|
java.lang.Class<?> |
getDefinedClass()
Returns the class defined by this woven class.
|
java.util.List<java.lang.String> |
getDynamicImports()
Returns the list of dynamic import package descriptions to add to the
bundle wiring for this woven class. |
java.security.ProtectionDomain |
getProtectionDomain()
Returns the protection domain to which the woven class will be assigned
when it is defined.
|
int |
getState()
Returns the current state of this woven class.
|
boolean |
isWeavingComplete()
Returns whether weaving is complete in this woven class.
|
void |
setBytes(byte[] newBytes)
Set the class file bytes to be used to define the
named class. |
static final int TRANSFORMING
The woven class is in this state while weaving hooks
are being called. The woven class is mutable so the class bytes
may be modified
and
dynamic imports
may be added. If a weaving
hook throws an exception the state transitions to
TRANSFORMING_FAILED
. Otherwise, after the last weaving hook has
been successfully called, the state transitions to TRANSFORMED
.
static final int TRANSFORMED
The woven class is in this state after weaving hooks
have been called and before the class is defined. The woven class cannot
be further transformed. The woven class is in this state while defining
the class. If a failure occurs while defining the class, the state
transitions to DEFINE_FAILED
. Otherwise, after the class has
been defined, the state transitions to DEFINED
.
static final int DEFINED
The woven class is in this state after the class is defined. The woven
class cannot be further transformed. This is a terminal state. Upon
entering this state, this object is effectively immutable, the
bundle wiring
has been updated with the
dynamic import requirements
and the class
has been defined
.
static final int TRANSFORMING_FAILED
The woven class is in this state if a weaving hook
threw an exception. The woven class cannot be further transformed or
defined. This is a terminal state. Upon entering this state, this object
is effectively immutable.
static final int DEFINE_FAILED
The woven class is in this state when a failure occurs while defining the class. The woven class cannot be further transformed or defined. This is a terminal state. Upon entering this state, this object is effectively immutable.
byte[] getBytes()
named
class.
While in the TRANSFORMING
state, this method returns a reference
to the class files byte array contained in this object. After leaving the
TRANSFORMING
state, this woven class can no longer be
transformed and a copy of the class file byte array is returned.
named
class.java.lang.SecurityException
- If the caller does not have
AdminPermission[bundle,WEAVE]
and the Java runtime
environment supports permissions.void setBytes(byte[] newBytes)
named
class. This method must not be
called outside invocations of the weave
method by the framework.
While in the TRANSFORMING
state, this method replaces the
reference to the array contained in this object with the specified array.
After leaving the TRANSFORMING
state, this woven class can no
longer be transformed and this method will throw an
IllegalStateException
.
newBytes
- The new classfile that will be used to define the
named
class. The specified array
is retained by this object and the caller must not modify the
specified array.java.lang.NullPointerException
- If newBytes is null
.java.lang.IllegalStateException
- If state is TRANSFORMED
,
DEFINED
, TRANSFORMING_FAILED
or
DEFINE_FAILED
.java.lang.SecurityException
- If the caller does not have
AdminPermission[bundle,WEAVE]
and the Java runtime
environment supports permissions.java.util.List<java.lang.String> getDynamicImports()
bundle wiring
for this woven class. Changes
made to the returned list will be visible to later weaving hooks
called with this object. The returned list must not be
modified outside invocations of the weave
method by the framework.
After leaving the TRANSFORMING
state, this woven class can no
longer be transformed and the returned list will be unmodifiable.
If the Java runtime environment supports permissions, any modification to
the returned list requires AdminPermission[bundle,WEAVE]
.
Additionally, any add or set modification requires
PackagePermission[package,IMPORT]
.
IllegalArgumentException
if a
malformed dynamic import package description is added.boolean isWeavingComplete()
true
if state
is DEFINED
,
TRANSFORMING_FAILED
or DEFINE_FAILED
;
false
otherwise.java.lang.String getClassName()
java.security.ProtectionDomain getProtectionDomain()
null
if no protection domain will
be assigned.java.lang.Class<?> getDefinedClass()
null
. Once weaving is
complete
, this method will return the class
object if this woven class was used to define the class.null
if
weaving is not complete, the class definition failed or this
woven class was not used to define the class.BundleWiring getBundleWiring()
int getState()
A woven class can be in only one state at any time.
TRANSFORMING
, TRANSFORMED
,
DEFINED
, TRANSFORMING_FAILED
or
DEFINE_FAILED
.Copyright © OSGi Alliance (2000, 2020). All Rights Reserved. Licensed under the OSGi Specification License, Version 2.0