@ConstructorProperties
annotationThe
@ConstructorProperties
annotation was introduced
in Java SE 6.0 to show how the parameters of annotated constructor
correspond to an object's properties. Previously, the constructor
DefaultPersistenceDelegate(String[]
constructorPropertyNames)
was used for the same goal, but
was not an appropriate approach for library classes.
Technically, an annotation is used for copying beans with
read-only properties. In the following code example the
Food
properties are read-only.
public class Food { private final int varieties; private final String country; @ConstructorProperties({"varieties", "country"}) public Point(int varieties, String country) { this.varieties = varieties; this.country = country; } public int getVarieties() { return this.varieties; } public String getCountry() { return this.country; } }
To create a vegetable
object with the same
properties that the fruit
object has, use the
following code:
Food fruit = new Food (5, "Argentina"); Food vegetable = new Food (fruit.getVarieties(), fruit.getCountry());Defining the annotation accomplishes two goals:
DefaultPersistenceDelegate
class.NullPointerException
error
with the EventHandler
classThe NPR exception was thrown by the EventHandler
class. The create
method of the
EventHandler
class checks the null
value,
and javadoc is corrected accordingly.
Documentation on the EventHandler
class of the
eventPropertyName
argument did not clearly explain
waht the argument supports. Information about what the
eventProperName
property is capable of is included in
the documentation for the
create
method.
EventHandler
class should not cache
the Method
objectThe method search is improved, and the method is prevented from
being cached in the EventHandler
class field.
EventHandler
class did support same syntax as the event propertyThe target property syntax is fixed and now supports an arbitrary number of methods or properties. This was accomplished by separating each property or method with a ".".
XMLEncoder
classThe following fixes were performed to improve the long-term persistence process.
java.beans.XMLEncoder
class does not
encode java.net.URI
objectsThe Statement
class could not access a member of
the java.net.URI
class with modifiers private. In JDK
6.0 an appropriate PersistenceDelegate
is provided to
solve this problem.
XMLEncoder
class does not encode
null
entries in HashMap
objectsA null Key
entry of the HashMap
object
was not included into the XML output. The fix includes a null
Key
entry to the XML file.
XMLEncoder
class emits invalid
XMLThe XMLEncoder
class produces an XML output only
for valid XML characters. A new code
attribute was
introduced for a character element. The code
contains
a hexadecimal value if it starts with "#". Otherwise it
contains a decimal value.
XMLEncoder
class does not encode
enumerations correctlyThe XMLEncoder
class was not serializing an
enumeration correctly. The EnumPersistenceDelegate
class, a new persistence delegate, was introduced to support the
serialization of enum classes.
XMLEncoder
class ignores persistence
delegates when used with Java Web StartA DefaultPersistenceDelegate
class for some classes
was created improperly. As a result the hack that adds field access
for properties and breaking JavaBeans specification was detected.
The performed fix removes the hack that was intended for the
following classes: java.awt.Dimension
,
java.awt.Point
, and
java.awt.Rectangle
.
XMLDecoder
class ignores statements
made to owner unless the read()
method is calledInitially the XMLDecoder class was created with lazy
initialization. The fix enables parsing in the close()
method if a file is not parsed by the readObject()
method.
XMLDecoder
class fails when using
Turkish LocaleThe XMLDecoder
class did not function correctly
when reading an English XML file on a machine with the locale set
to Turkish. To fix this bug the toLowerCase
and
toUpperCase
methods are invoked in the English
locale.
Component
object is missing during
xml serializingContainer
objects were not serialized. The fix adds
special behavior to the persistence delegate for containers with
BorderLayout
.