如何将Java对象转换为XML字符串,并相反地将XML转换为Java对象?

时间:2011-08-24 07:57:26

标签: java xml

假设一个Java对象:

Object obj = new Object();

如何将此对象存储在数据库中以保持此状态,并且在存储之后,应该很容易转换为Java对象,就像存储它一样?

5 个答案:

答案 0 :(得分:5)

其中任何一项都可以:

或者只是简单的JDK XMLEncoder / XMLDecoderintroductory article),但如果你问我,那就是驴子的痛苦。

答案 1 :(得分:4)

此外,JAXB。 (Hello World example

答案 2 :(得分:2)

您可以使用XStream,这非常简单明了,如this 2分钟教程所示。

答案 3 :(得分:2)

注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2(JSR-222)专家组的成员。


  

如何将Java对象转换为XML字符串,反之亦然   XML到Java对象?

使用JAXB,您可以将对象封送到java.io.StringWriter以生成String,并利用java.io.StringReaderString解组对象。


  

然后我想将这个对象存储在数据库中

Java EE 解决方案是使用 JPA 实现(TopLink / EclipseLink,Hibernate,Open JPA等)将对象存储在数据库和 JAXB 实现(TopLink / EclipseLink,Metro,Apache JaxMe等)将对象转换为XML或从XML转换。

由于您将对象保存到数据库,因此需要确保对象到XML映射(OXM)解决方案需要考虑以下事项:

双向关系

与对象 - 关系映射(ORM)解决方案一起使用的对象模型通常具有双向关系。您需要确保这不会将OXM层发送到循环中。例如, MOXy JAXB 具有@XmlInverseReference扩展名来处理此问题:

懒惰的关系

许多ORM解决方案提供了一种机制,可以轻松实现对象之间的关系。有些像TopLink / EclipseLink修改Java字节码以将逻辑添加到“get”方法。您将需要一个能够利用字段和属性的OXM解决方案。在MOXy或任何JAXB实现中,这是通过@XmlAccessorType

完成的

复合键/嵌入式键类

数据库表通常具有复合键。如果这些密钥也将用于文档内引用,那么您将需要一个可以处理它的OXM解决方案。 MOXy提供@XmlKey@XmlJoinNodes

答案 4 :(得分:0)

以下是AbacusUtil最简单,最快速的代码:

Account account = N.fill(Account.class);
String xml = N.toXML(account);
N.println(xml); // <account><id>6264304841028291043</id><gui>33acdcbe-fd5b-49</gui><emailAddress>19c1400a-97ae-43</emailAddress><firstName>67922557-8bb4-47</firstName><middleName>7ef242c9-8ddf-48</middleName><lastName>1ec6c731-a3fd-42</lastName><birthDate>1480444055841</birthDate><status>1444930636</status><lastUpdateTime>1480444055841</lastUpdateTime><createTime>1480444055841</createTime></account>
Account account2 = N.fromXML(Account.class, xml);
assertEquals(account, account2);

声明:我是AbacusUtil的开发者。