HyperJAXB3 - Разбор XSD, включая xs: любые символы подстановки - PullRequest
0 голосов
/ 23 мая 2018

У меня есть огромная схема xsd (формат railML 2.2 с открытым исходным кодом), для которой я пытаюсь создать аннотированную объектную модель JPA.Я хочу использовать HyperJAXB3 для этого.

Схема XSD включает некоторые элементы <xs:any namespace="##other" />.У меня нет шансов изменить файлы xsd.Компилятор hyperjaxb выдает ошибку:

Class [org.railml.schemas._2013.TElementWithIDAndName] declares an attribute wildcard. This is currently not supported. See issue #46.

Таким образом, Hyperjaxb, похоже, испытывает проблемы с этими подстановочными конструкциями.Я пытался добавить hj:ignored привязку

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
    xmlns:jaxb="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"
    xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations"
    version="2.1">
    <!-- global bindings -->
    <jaxb:globalBindings>
        <xjc:simple />
    </jaxb:globalBindings>

    <jaxb:bindings
        schemaLocation="genericRailML.xsd">

        <jaxb:bindings node="//xs:schema//xs:complexType[@name='tElementWithIDAndName']//xs:sequence//xs:any">
            <hj:ignored/>
        </jaxb:bindings>
    </jaxb:bindings>    
</jaxb:bindings>

Но тогда компилятор дает:

[ERROR] compiler was unable to honor ignored customization. It is attached to a wrong place, or its inconsistent with other bindings.

Ссылочная часть XSD:

<xs:schema xmlns:rail="http://www.railml.org/schemas/2013" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:dc="http://purl.org/dc/elements/1.1/" targetNamespace="http://www.railml.org/schemas/2013" elementFormDefault="qualified" version="2.2">

...

  <xs:complexType name="tElementWithIDAndName">
    <xs:annotation>
      <xs:documentation>generic base type, used for inheritance of many railML types</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="additionalName" type="rail:tAdditionalName" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          ...
        </xs:annotation>
      </xs:element>
      <xs:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>provide an extension point for non-railML elements in foreign namespace</xs:documentation>
        </xs:annotation>
      </xs:any>
    </xs:sequence>
    <xs:attribute name="id" type="rail:tGenericID" use="required">
      ...
    </xs:attribute>
    ...
  </xs:complexType>

...
</xs:schema>

Есть лиспособ анализа документа XSD с помощью HyperJAXB или есть способ обойти элементы xs:any?

...