我想直接從XML字符串中反序列化(解組)POJO,而不需要任何配置(模式定義或其他)文件。動態JAXB XML反序列化(解組)
我的應用程序使用一個簡單的抽象基類Field
如下:
public abstract class Field
{
private final String name;
private final Object value;
protected Field(String name, Object value)
{
this.name = name;
this.value = value;
}
}
其通過各種其他類擴展,如
public class StringField extends Field
{
public StringField(String name, String value)
{
super(name, value);
}
}
注意,沒有無參數構造上任何這些類。
中的序列StringField POJO看起來像
<StringField>
<name>test</name><type />
<value>Some text</value>
</StringField>
假設上述XML存儲在名爲xml
,我試圖用JAXB反序列化一個字符串變量,通過下面的方法:
public static Field deserialize(String xml)
{
Field field = null;
try
{
JAXBContext context = JAXBContext.newInstance(Field.class);
javax.xml.bind.Unmarshaller um = context.createUnmarshaller();
field = (Field)um.unmarshal(new StringReader(xml));
}
catch (JAXBException e)
{
e.printStackTrace();
}
return field;
}
理想情況下,我希望將XML字符串反序列化到適當的Java POJO(即上面案例中的StringField)中。
但是,我得到JAXB異常,因爲Field沒有無參數構造函數,即使我在那裏放置一個,因爲它不能被實例化。
但即使我將Field類設置爲非抽象,通過默認構造函數分配給2個字段(name,value)的值是主要的值,而不是從XML字符串反序列化的實際值。即使這有效,我不會得到一個子對象(StringField),但是一個父對象(Field)。
是否有任何動態反序列化POJO,沒有模式聲明,並獲得實際(子)對象使用JAXB的通用方式?