XPath评估" xs:complexType [@name =' Any']"导致空目标节点

时间:2014-10-16 17:12:57

标签: xml maven jaxb xsd hyperjaxb

我正在尝试使用hyperjaxb来处理真正的架构。我下载并解压缩了hyperjaxb maven项目from this link,然后使用cmd.exe导航到根目录,并通过运行mvn clean install对示例数据进行测试,以确保它与示例模式一起使用。然后,我使用实际shematics的精简版替换了schema.xsdpo.xmlbindings.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  

来自您可以阅读at this link.的替换bindings.xjb文件 使用schema.xsd文件at this link以及您可以阅读的po.xml at this link

bindings.xjb的相关部分是:

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

schema.xsd中ANY 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>  

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

1 个答案:

答案 0 :(得分: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'