2

我正在尝试让 hyperjaxb 处理真实的模式。我从此链接下载并解压缩了 hyperjaxb maven 项目,然后导航到根目录cmd.exe,并使用示例数据通过运行mvn clean install对其进行测试,以确保它适用于示例模式。然后,我将 、 和 文件替换schema.xsdpo.xml实际bindings.xjb图形的精简版本,以便我可以准备通过上面链接的 hyperjaxb 项目运行真正的应用程序。然后我又跑mvn clean install了。但是,我收到以下错误消息:

[ERROR] Error while parsing schema(s).Location 
[ file:/C:/path/to/src/main/resources/bindings.xjb{25,53}].
com.sun.istack.SAXParseException2; systemId: 
file:/C:/path/to/src/main/resources/bindings.xjb; lineNumber: 25; columnNumber: 53; 
XPath evaluation of "xs:complexType[@name='Any']" results in empty target node  

从您可以在此链接中阅读的替换bindings.xjb文件中。 使用此链接上的文件,以及您可以在此链接上阅读的文件。 schema.xsdpo.xml

bindings.xjb 的相关部分是:

<jaxb:bindings node="xs:complexType[@name='Any']">
    <hj:entity>
        <orm:table name="any"/>
    </hj:entity>
</jaxb:bindings>

ANYschema.xsd 中 complexType 的定义为:

<xs:complexType name="ANY"><!-- abstract="true">-->
  <xs:annotation>
    <xs:documentation>
        Some documentation.
    </xs:documentation>
  </xs:annotation>
  <xs:attribute name="nullFlavor" type="NullFlavor" use="optional">
    <xs:annotation>
      <xs:documentation>
           Some other documentation.
        </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>  

请注意,完整的代码在上面的链接中。 如何解决此错误?

4

1 回答 1

2

您应该使用以下配置..

<jaxb:bindings node="//xs:complexType[@name='ANY']">
    <hj:entity>
        <orm:table name="any"/>
    </hj:entity>
</jaxb:bindings>

您可以在我对另一个主题的回答中找到一个示例。 https://stackoverflow.com/a/24953369/3364187


我试过你的项目,这个配置工作正常。让我知道是否适用于您的环境。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
    version="2.1"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations"
    xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
    jaxb:extensionBindingPrefixes="hj orm">

    <jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
        <jaxb:globalBindings generateIsSetMethod="true"/>
        <jaxb:schemaBindings>
            <jaxb:package name="org.jvnet.hyperjaxb3.ejb.tests.pocustomized"/>
        </jaxb:schemaBindings>
        <jaxb:bindings node="//xs:complexType[@name='InfrastructureRoot.typeId']">
            <hj:entity>
                <orm:table name="typeId"/>
            </hj:entity>
        </jaxb:bindings>
        <jaxb:bindings node="//xs:complexType[@name='II']">
            <hj:entity>
                <orm:table name="II"/>
            </hj:entity>
        </jaxb:bindings>
        <jaxb:bindings node="//xs:complexType[@name='ANY']">
            <hj:entity>
                <orm:table name="any"/>
            </hj:entity>
        </jaxb:bindings>
    </jaxb:bindings>


</jaxb:bindings>

简而言之,每个节点都丢失了//

从当前节点中选择文档中与选择匹配的节点,无论它们在哪里

并且复杂类型不是“Any”而是“ANY”,那么正确的节点是@name='ANY'

于 2014-10-16T17:31:30.063 回答