java - 使用 Jaxb 和绑定(bind)更改 XSD 中引用元素的生成变量的名称

标签 java reference xsd jaxb xjb

今天我遇到了一个无法解决的难题。我将从解释和示例开始。

我有 2 个 XSD 文件。一个 XSD 文件引用另一个元素之一。

第一个 XSD- ReportInfo.xsd:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema id="ReportInfoWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="ReportInfoWrapper" >
    <xs:complexType>
      <xs:sequence>
          ...
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

第二个 XSD- ReportInfoRecordSet.xsd:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema id="ReportInfoRecordSetWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:include schemaLocation="./ReportInfo.xsd" />
  <xs:element name="ReportInfoRecordSetWrapper">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ReportInfoWrapper" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

ReportInfoRecordSet 引用 ReportInfoWrapper(ReportInfo 的根元素)。我需要知道我将在 JAXB 绑定(bind)文件中定义什么来更改 ReportInfoRecordSet 中此引用元素的生成名称。这是它当前生成的内容:

public class ReportInfoRecordSetWrapper {

@XmlElement(name = "ReportInfoWrapper", required = true)
protected List<ReportInfoWrapper> reportInfoWrappers; //I need to change the name here in the bindings file.

问题 任何帮助或建议将不胜感激。请注意,我不能使 ReportInfo 的根元素成为复杂类型,因为它会破坏 ReportInfo 的当前绑定(bind)文件。有什么方法可以用以下符号定义变量的名称吗?请注意,由于某些原因,下面的示例不起作用(我相信它的节点定位问题”:

      <jaxb:bindings node=".//xsd:element[@name='ReportInfoRecordSetWrapper']/xsd:complexType/xsd:sequence/xsd:node[@ref=ReportInfoWrapper"]">
         <jaxb:property name="records" />
      </jaxb:bindings>

注意

查看我在这里尝试的内容的简单方法,我可以用正常的开发术语进行解释。

ReportInfo 是“类”

ReportInfoRecordSet 是 ReportInfo 类的数组。

编辑

<jaxb:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    xmlns:annox="http://annox.dev.java.net"
    jaxb:extensionBindingPrefixes="xjc inheritance annox"
    version="2.1">
    <jaxb:globalBindings localScoping="toplevel">
        <xjc:simple />
        <xjc:javaType adapter="aem.adservices.google.dfa.utils.DateAdapter" name="java.util.Calendar" xmlType="xs:dateTime" />
    </jaxb:globalBindings>
    <jaxb:bindings schemaLocation="../xsd/ReportInfoRecordSet.xsd" >
      <jaxb:bindings node=".//xsd:element[@name='ReportInfoRecordSetWrapper']/xsd:complexType">
         <annox:annotate>
           <annox:annotate annox:class="aem.utilities.boomi.BoomiObject" label="ReportInfoRecordSet" description="ReportInfoRecordSet" OperationTypes="UPSERT"  />
         </annox:annotate>
      </jaxb:bindings>
       <jaxb:bindings node="//*/xs:element[@ref='ReportInfoWrapper']">
           <jaxb:property name="records"/>
       </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

错误在第 19 行抛出,提示 XPATH 错误:null。第 19 - 21 行是添加到我的代码中的新行。

编辑 2

记住 children ,使用 XJC 需要您仔细检查您提供给 XPATH 处理器的命名空间。我发现 node="//*/xs:element[@ref='ReportInfoWrapper']" 应该是 node="//*/xsd:element[@ref= 'ReportInfoWrapper']"

最佳答案

此绑定(bind)必须有效(在本地检查):


<jxb:bindings version="1.0" 
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
  jxb:extensionBindingPrefixes="xjc">
    <jxb:bindings schemaLocation="ReportInfoRecordSet.xsd" node="/xs:schema">
       <jxb:bindings node="//*/xs:element[@ref='ReportInfoWrapper']">
            <jxb:property name="records"/>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

关于java - 使用 Jaxb 和绑定(bind)更改 XSD 中引用元素的生成变量的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13701869/

相关文章:

c++ - 模板函数类型推导和运算符<<

java - COBOL copybook 中的字符串长度

xml - XSD 元素基数 - 如何建模 'One of the fields is mandatory'

c# - 如何将 XSD 文件转换为 C# 类

java - JFrame 中的 JPanel 上的 JPanel 不会显示

java - "Type mismatch: cannot convert from null to double"是什么意思?

java - 无法通过带有客户端证书的 SSL 发出 SOAP 请求

c++ - 通过指针转换将右值绑定(bind)到非常量引用?

java - JPanel棋盘不显示

java - 复制迭代器