微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以处理JAXB中多个.xsd文件中重复的元素定义?

如何解决有没有一种方法可以处理JAXB中多个.xsd文件中重复的元素定义?

我对此有一个中途解决方法,但是这非常耗时。我必须<execution/>为每个具有重复条目的文件创建一个单独的文件

<executions>
  <execution>
    <id>jaxb-mac</id>
    <phase>generate-sources</phase>
    <goals>
      <goal>generate</goal>
    </goals>
    <configuration>
      <forceRegenerate>true</forceRegenerate>
      <generatePackage>my.company.mac</generatePackage>
      <schemaDirectory>src/main/schema</schemaDirectory>
      <schemaIncludes>
        <include>mac-3.4.xsd</include>
      </schemaIncludes>
    </configuration>
  </execution>
  <execution>
    <id>jaxb-stylesheet</id>
    <phase>generate-sources</phase>
    <goals>
      <goal>generate</goal>
    </goals>
    <configuration>
      <forceRegenerate>true</forceRegenerate>
      <generatePackage>my.company.stylesheet</generatePackage>
      <schemaDirectory>src/main/schema</schemaDirectory>
      <schemaIncludes>
        <include>mac-stylesheet-3.4.xsd</include>
      </schemaIncludes>
    </configuration>
  </execution>

这个<forceRegenerate>true</forceRegenerate>很重要,或者只有第一个<execution/>会运行,其余的会认为没有必要运行,因为我正在生成一个目录。

我仍然希望使用劳动强度较小的解决方案来处理重复项。

我认为,如果我将第一个主.xsd制作成一个单独的模块,并将其内置到自己的.jar文件中,那么我可以使用<episode/>标签,并让它跳过一遍又一遍地生成相同的重复元素,因为它们的定义相同。

从那以后,我决定尽可能放弃XML并完全放弃JAXB。 从此编辑开始,有更新更好的方法来解析XML并将其映射到对象。

解决方法

我有很多.xsd文件要为其自动生成代码。当我尝试同时生成所有文件时,其中两个文件具有重复的名称冲突。

我专注于尝试让其中的2个起作用。

当我使这2个工作正常时,我将修复其余的工作。但是我现在只关注其中两个文件。我无法控制它们,它们来自供应商,并且遵循 “标准” ,因此出于多种原因,
不能对其进行编辑

我正在使用maven-jaxb2-plugin来处理这些文件。

我已binding.xjb按照mat b答案中的链接以及在网上找到的其他说明中的建议添加了一个文件。但是我收到以下错误,没有输出。

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="2.1"
              xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xsi:schemaLocation=" http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd">
  <jxb:bindings schemaLocation="mac-3.4.xsd">
    <jxb:schemaBindings>
      <jxb:package name="my.company.mac"/>
    </jxb:schemaBindings>
  </jxb:bindings>
  <jxb:bindings schemaLocation="mac-stylesheet-3.4.xsd">
    <jxb:schemaBindings>
      <jxb:package name="my.company.stylesheet"/>
    </jxb:schemaBindings>
  </jxb:bindings>
</jxb:bindings>

给出以下错误

[ERROR] Error while parsing schema(s).Location [ file:/C:/Users/Jarrod%20Roberson/Projects/spa-tools/spa-lib/src/main/sc
hema/mac-stylesheet-3.4.xsd{165,33}].
org.xml.sax.SAXParseException: 'halign' is already defined

令人讨厌的元素是:(还有很多其他元素,这只是第一个发生冲突的元素)

<xsd:simpleType name="halign">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="left" />
    <xsd:enumeration value="center" />
    <xsd:enumeration value="right" />
  </xsd:restriction>
</xsd:simpleType>

并且在每个.xsd文件中都是相同的,我该如何解决这种重复,要么只生成一个类,要么将每个类生成到各自的包名称空间中?

这不是像这样唯一重复的元素,有很多元素,因此仅尝试从文件中删除它们也不是一种选择。

halign是在多个.xsd文件中,我想将它们放在单独的程序包中,或者能够告诉编译器使用生成的第一个文件。

这是我尝试外部.xjb文件之前开始的地方,只需在package中指定即可pom.xml

如何配置绑定以忽略重复的配置,将它们映射到单独的程序包或将它们映射到现有的实现?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。