如何从XML重构Java子类

时间:2012-06-06 13:46:26

标签: java xml jaxb xml-parsing

我将使用具有以下结构的XML

<xml>
<Header><Type>..</Type>...</Header>
<Data>...</Data>
</xml>

基于<Type>值,<Data>元素将具有不同的元素。例如

<xml>
<Header><Type>Int</Type></Header>
<Data><Integer>10<Integer></Data>
</xml>

<xml>
<Header><Type>Str</Type></Header>
<Data><String>JAXB Test</String></Data>
</xml>

Java类将是

class TypeEntity { }

class IntEntity extends TypeEntity { }

class StrEntity extends TypeEntity { }

我想使用JAXB来解析xml并相应地创建子类。我怎么能这样做?请帮帮我。

编辑:实际上我会从Web服务中获取这些XML。收到后我需要将这些转换为Java类。现在我使用DOM解析器来识别Type并实例化Java子类。我想知道有没有更好的方法来做到这一点。感谢

1 个答案:

答案 0 :(得分:0)

您需要为XML文档编写XSD架构,JAXB可以从中生成对象。

如果您不熟悉XSD,请检查this

或者您可以使用一些XML工具从XML生成模式。只需将XML搜索到XSD等等。

如果您拥有正确的文档XSD架构,则需要使用某种脚本来使用JAXB生成对象。我更喜欢ANT。

示例:

<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
    <classpath>
        <fileset dir="${lib.dir}" includes="*.jar" excludes="ant.jar"/>
    </classpath>
</taskdef>

<xjc schema="${src.main.resources}/YourXSDSchema.xsd" destDir="${your.output.dir}" package="your.package">
    <produces dir="${your.output.dir}/your/package" includes="**/*" />
</xjc>

然后编译生成的类,将它们打包到.jar中就可以了。