Использование ключевого слова «transient» в объявлении переменной или «@Transient» в получателе не останавливает сериализацию свойств XMLEncoder.Единственный способ сообщить XMLEncoder не сериализовать определенные свойства - это с помощью кода вроде:
BeanInfo info = Introspector.getBeanInfo(MyClass2.class);
PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; ++i) {
PropertyDescriptor pd = propertyDescriptors[i];
if (pd.getName().equals("props")) {
pd.setValue("transient", Boolean.TRUE);
}
}
Действительно ???Есть ли более простой способ, который не требует кода во время выполнения для обхода всех свойств?Что-то вроде модификатора переходного процесса будет качаться!
Вот JavaBean, который будет иметь все свои свойства, сериализованные XMLEncoder, несмотря на использование «переходного»:программа:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_29" class="java.beans.XMLDecoder">
<object class="TestJavaBeanSerialization">
<void property="myProp1">
<string>prop 1</string>
</void>
<void property="myProp2">
<string>prop 2</string>
</void>
</object>
</java>
ОБНОВЛЕНИЕ
Я до сих пор не получил окончательного ответа на исходный вопрос.Есть эта статья, на которую люди продолжают ссылаться, но она не ясна, и никто не дал ссылку на API или спецификацию, в которой четко указывается, что единственный способ пометить свойство как переходный - это пройти по всем свойствам и вызвать setValue.*