【问题标题】:xjc send different classes to different packagesxjc 将不同的类发送到不同的包
【发布时间】:2014-10-02 03:08:16
【问题描述】:

我正在使用 JAXB 从 xsd 模式创建类。 有没有办法标记单个 complexType,以便将它们发送到不同的目标包,而不是将它们全部发送到同一个包?

我需要这个的原因是很多生成的 java 类将被替换为来自不同来源的其他同名类。从一个目标文件夹中手动删除所有未使用的类是一种痛苦。将所有不需要的类放在一个不同的文件夹中会更容易,然后当我将输出导入 eclipse 时我可以忽略它。当我试图从 xsd 文件中的不需要的类中简单地排除 complexType 定义时,每次遇到不需要的类型之一的属性时,xjc 都会抛出错误。我需要保留属性引用,但我希望对这些属性的最终 java 引用指向已经通过其他方式生成的同名类。

这是我编译类的 build.xml 方法。我将如何改变它?

  <!--compile Java source files-->
  <target name="compile" description="Compile all Java source files">
    <echo message="Compiling the schema..." />
    <mkdir dir="gen-src" />
    <mkdir dir="gen-src/primer/po" />
    <xjc schema="somefilename.xsd" package="primer.po" destdir="gen-src" binding="rename.xjb">
      <produces dir="gen-src/primer/po" includes="**/*.java" />
    </xjc>
    <echo message="Compiling the java source files..." />
    <mkdir dir="classes" />
    <javac destdir="classes" debug="on">
      <src path="src" />
      <src path="gen-src" />
      <classpath refid="classpath" />
    </javac>
  </target>

【问题讨论】:

    标签: java xml ant jaxb xsd


    【解决方案1】:

    我认为这里有两件事可能会有所帮助:

    • 使用schemaBindings 自定义架构,将来自不同命名空间的类放在不同的包中。
    • 使用jaxb:class/@ref将类型映射到现有类。

    schemaBindings

    我一般不建议使用packagegeneratePackage 选项来配置输出包。使用schemaBindings 绑定元素。

    例子:

    <jaxb:bindings 
        schemaLocation="ogc/wps/1.0.0/wpsAll.xsd" 
        node="/xs:schema">
    
        <jaxb:schemaBindings>
            <jaxb:package name="net.opengis.wps.v_1_0_0"/>
        </jaxb:schemaBindings>
    </jaxb:bindings>
    

    jaxb:class/@ref

    如果你这样做了

     <xs:complexType name="vehicle">
        <xs:annotation><xs:appinfo>
          <jaxb:class ref="com.acme.foo.Vehicle" />
        </xs:appinfo></xs:annotation>
      </xs:complexType>
    

    那么 XJC 应该不会为 Vehicle 生成新类,而是使用 com.acme.foo.Vehicle

    结合schemaBindings 可以解决您的问题。不是直接的,但确实如此。

    文档:

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2013-09-04
      • 2015-01-28
      相关资源
      最近更新 更多