我正在尝试使用hyperjaxb来处理真正的架构。我下载并解压缩了hyperjaxb maven项目from this link,然后使用cmd.exe
导航到根目录,并通过运行mvn clean install
对示例数据进行测试,以确保它与示例模式一起使用。然后,我使用实际shematics的精简版替换了schema.xsd
,po.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
来自您可以阅读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>
请注意,完整的代码位于上面的链接中。 如何解决此错误?
答案 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'