Измените имя сгенерированной переменной для ссылочного элемента в XSD, используя Jaxb и привязки

Сегодня у меня есть умопомрачитель, которого я просто не могу решить. Я начну с объяснения и примера.

У меня есть 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, чтобы изменить сгенерированное имя для этого ссылочного элемента в 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. Есть ли способ определить имя переменной в следующих обозначениях? Обратите внимание, что этот пример ниже не работает по какой-то причине (я считаю, что проблемы с таргетингом на узлы "

      <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: ноль. Строки 19 - 21 - это новые строки, добавленные в мой код.

РЕДАКТИРОВАТЬ 2

Помните, дети, работа с XJC требует, чтобы вы дважды проверили, какие пространства имен вы предоставляете процессору XPATH. Я нашел ошибку, где node="//*/xs:element[@ref='ReportInfoWrapper']" должно быть node="//*/xsd:element[@ref='ReportInfoWrapper']"

1 ответ

Решение

Эта привязка должна работать (проверено локально):


<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>
Другие вопросы по тегам