Java与XML的故事一:通过XSD生成Java类

JAXB让Java与XML之间繁琐的机械编码成为过去,现在可以简单的通过XSD文件生成对应的Java文件,我一般使用maven-jaxb2-plugin来实现xsd到java文件的生成。
POM配置
指定xsd文件路径,制定binding文件路径,指定生成java文件路径

<plugin>
  <groupId>org.jvnet.jaxb2.maven2groupId>
  <artifactId>maven-jaxb2-pluginartifactId>
  <version>0.9.0version>
  <executions>
    <execution>
      <id>schema1-generateid>
      <goals>
        <goal>generategoal>
      goals>
      <configuration>
       <schemaDirectory>src/main/resources/dir1schemaDirectory>
        <schemaIncludes>
          <include>1.xsdinclude>
        schemaIncludes>
        <extension>trueextension>
        <generateDirectory>${project.build.directory}/generated-sources/xjc1generateDirectory>
        <episodeFile>${project.build.directory}/generated-sources/xjc1/META-INF/1.episodeepisodeFile>
          <bindingDirectory>src/main/resources/dir1bindingDirectory>
        <bindingIncludes>
             <include>1.xjbinclude>
        bindingIncludes>
      configuration> 
   execution> 
 executions>
plugin>

binding.xjb配置
实现类型匹配,包匹配,如果类型匹配复杂,可能需要实现自己的转换类

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0" schemaLocation="book.xsd">

    <jaxb:globalBindings
fixedAttributeAsConstantProperty="true"
typesafeEnumBase="xs:string"
typesafeEnumMemberName="generateName"
generateIsSetMethod="true">


        <xjc:serializable uid="1" />
        <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
    jaxb:globalBindings>    
    <jaxb:schemaBindings schemaLocation="1.xsd" node="/xs:schema">        
     <jaxb:package name="com.cloud" /> 
    jaxb:schemaBindings>
  jaxb:bindings>

Note1: 新版本的plugin不止可以生成java class,还可以帮忙生成object的最重要的几个方法:toString, equals, hashCode, clone,只要在configuration里配置对于的plugin就可以了

<configuration>
    <extension>trueextension>
    <args>
        <arg>-XtoStringarg>
        <arg>-Xequalsarg>
        <arg>-XhashCodearg>
        <arg>-Xcopyablearg>
    args>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2_commonsgroupId>
            <artifactId>jaxb2-basicsartifactId>
            <version>version>
        plugin>
    plugins>
configuration>

Note2: 我遇到过同一个项目中2个xsd文件有同样的node type,不同的内容,虽然指定了不同包来generate source还是报错,最后的解决方案是用2个execution分别解析不同的xsd文件,不过我使用cxf插件就没有遇到这个问题,可以在一个execution里面生成想要的所有Java class。

你可能感兴趣的:(XML,Java)