当前位置: 首页 > 知识库问答 >
问题:

在外部绑定的情况下为同一类型生成的jaxb多个类

锺离穆冉
2023-03-14
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="person">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="pType" type="pType" minOccurs="0" />
                <xs:element name="sex" type="xs:string"
                    minOccurs="1" />
                <xs:element name="dob" type="xs:string"
                    minOccurs="1" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
<!-- some more elements ignored for clarity.................
.......................... -->

    <xs:complexType name="pType">
        <xs:sequence>
            <xs:element name="category" type="xs:string"
                minOccurs="0" />
            <xs:element name="blahh" type="xs:string"
                minOccurs="0" />
        </xs:sequence>
    </xs:complexType>

</xs:schema>

jaxb绑定

<jxb:bindings schemaLocation="person.xsd">
    <jxb:bindings node="//xs:complexType[@name='pType']">
        <jxb:class name="PersonType" />
    </jxb:bindings>
</jxb:bindings>

<jxb:bindings schemaLocation="person.xsd">
    <jxb:bindings
        node="//xs:element[@name='person']//xs:element[@name='pType']">
        <jxb:class ref="PersonType" />
    </jxb:bindings>
</jxb:bindings>

我定义了绑定,将 的名称重写为persontype。在XJC生成中,它生成PersonType.class和Ptype.class。

如果我在元素 内部定义 ,那么它不会生成ptype.class。但是我必须在模式的根级别声明 ,因为这个xs:complextype也被其他模式引用。

我试图在绑定中重写 ,但生成了ptype.class。

我如何指示它不要生成ptype.class?

共有1个答案

东门航
2023-03-14

问题是在Maven-jaxb2-plugin中,每个模式(依赖模式person2.xsdperson.xsd)都有2次执行。因此,我手动编写了插曲文件,以引用已经创建的 并解决了这个问题。

为了帮助有同样问题的人,下面是插件执行细节和插曲文件。请注意,我没有使用namespaces,因此您会发现sCD在没有namespace的情况下很简单。

人物事件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" if-exists="true" version="2.1">

 <jaxb:bindings scd="x-schema::">
    <jaxb:bindings scd="/type::pType">
      <jaxb:class ref="org.wipo.pct.test.PersonType"/>
      <jaxb:package name="org.wipo.pct.test" />
    </jaxb:bindings>
  </jaxb:bindings>
</jaxb:bindings>
<execution>
        <id>person</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <schemaIncludes>
                <include>person.xsd</include>
            </schemaIncludes>
            <bindingIncludes>
                <include>pbindings.xjb</include>
            </bindingIncludes>
            <verbose>true</verbose>
        </configuration>
    </execution>
<execution>
    <id>person2</id>
    <phase>generate-sources</phase>
    <goals>
        <goal>generate</goal>
    </goals>
    <configuration>
        <schemaIncludes>
            <include>person2.xsd</include>
        </schemaIncludes>
        <bindingIncludes>
            <include>pbindings2.xjb</include>
        </bindingIncludes>
        <verbose>true</verbose>
        <args>
            <arg>-b</arg>
            <arg>src/main/resources/person-episode</arg>
            <arg>-Xsimplify</arg>
            <arg>-Xinheritance</arg>
        </args>
    </configuration>
</execution>
 类似资料:
  • 是否有任何JAXB绑定可以告诉JAXB代码生成器将Java类生成为,而不必在XSD中将相应的XML类型标记为? 情况如下: > 我在xsd中定义架构: 我使用内联JAXB绑定(“inline”==“直接在模式中”)来指示应该生成JAXB类的包(): 我使用内联JAXB绑定为我的每个复杂类型(在本例中、和)指示实现类的名称: 我从模式生成JAXB类。这导致: 我自己编写类: 使用这两个类层次结构这样

  • 我有以下xml类型: FaxNumber类型如下所示: 生成的xml应该如下所示: 运行JAXB XJC从XSD生成java类时,它会生成以下类: 但是,我想绑定FaxNumber到这样的复合类: 有没有办法在JAXB绑定xml中定义这样的绑定? 注意:不幸的是,我无法控制并且无法更改XSD

  • 例如。 当我将类A作为Testng类执行时,得到以下输出 而期望的输出是

  • 问题内容: 为了掌握AngularJS,我决定使用其中一个示例,特别是在Todo示例中简单地添加一个“ complete”屏幕,当用户输入5个todo时,它会使用一个切换案例切换到另一个div。 。如果有任何用处,可以在这里找到代码http://jsfiddle.net/FWCHU/1/。 但是,似乎每个开关盒都有其自己的作用域($ scope.todoText不可用),但是在这种情况下,可以使用

  • 我正在重新学习Hibernate和JPA。我正在使用Spring Boot,Gradle和Postgres为我的环境。我有一组访问Postgres数据库的域对象。两个对象不使用注释,使用一个JDBCTemplate类进行数据库操作。另一组域对象使用JPA注释。JPA对象集具有使用JPA注释映射的关系。当我运行单元测试来检查JDBC模板对象的数据库实体时,一切都很好。当我检查数据库时,我发现使用注释

  • 例如,JPA标准API可以在没有生成元模型的情况下使用。失去了类型安全性,但我可以在运行时仅使用反射来创建查询,而无需事先了解数据模型。我想以同样的方式使用Querydsl。我不关心类型安全问题,因为我不知道数据模型。 在我最近的项目中,我想使用Querydsl,主要是因为它构成了持久性之上的另一层。所以我希望可以在JPA、JDO、JDBC、Lucene、Hibernate Search、Mong