【问题标题】:Validation of XML with maven-created schema fails when namespace is defined定义命名空间时,使用 Maven 创建的模式验证 XML 失败
【发布时间】:2013-07-23 13:00:15
【问题描述】:

在定义命名空间时,使用 Maven 创建的模式验证 XML 失败,但是 只要我不配置命名空间,就可以对架构进行验证。

<transformSchemas>
<!--  doesn't work
    <transformSchema>
        <uri>tlm-classification</uri>
        <toPrefix>tlm-ec</toPrefix>
        <toFile>classification.xsd</toFile>
    </transformSchema>
-->
</transformSchemas>

如果我定义命名空间,添加一个 uri 并将命名空间添加到所有带有 jaxb 注释的 java 类,则创建了两个 XSD 文件而不是一个,并且验证失败:

src-resolve: Cannot resolve the name 'equipmentClassification' to a(n) 'type definition' component.

将两个 xsd 文件复制到类路径后,我得到了

cvc-complex-type.2.4.a: Invalid content was found starting with element 'name'. One of '{"tlm-equipmentclassification":count}' is expected.

在使用 maven 创建命名空间-XSD 时,我收到了这个警告,我无法修复, 也许错误与此有关。

[INFO] --- jaxb2-maven-plugin:1.5:schemagen (default-cli) @ tlmsim ---
Note: Writing C:\dev\java\workspaces\tlm\tlmsim\schema1.xsd
Note: Writing C:\dev\java\workspaces\tlm\tlmsim\schema2.xsd
[WARNING] SimpleNamespaceResolver contained no localNamespaceURI; aborting rename.

我还可以提供 xml 和 xsd 文件。但随着 XML 和单个非命名空间 XSD 的验证,错误必须位于 JAXB 注释中的某个位置。

问题

  • 为什么定义命名空间时会创建两个 XSD 文件?
  • 我必须考虑对带有 JAXB 注释的类进行注释。
  • (由于建议使用javac,因为schemagen不会 将来会得到支持。您对此有何意见?)

其他信息

我在1.5 版本中使用org.codehaus.mojo:jaxb2-maven-plugin

我有某种类层次结构,甚至使用 XmlAdapter 来编组包含在某些 XmlRootelements 中的映射。一些父类共享相同的子元素。我最初的计划是在其对应目录中为每个XmlRootelement 自动创建一个独立的方案。

如果需要更多信息,我可以提供。

【问题讨论】:

  • 我只是将命名空间留在外面并手动进行重命名......但我仍然希望它能够工作。
  • Java注解类中如何定义命名空间?
  • @XmlRootElement@XmlElement 有一个 namespace 字段,我确实在每个相关类中都设置了它。
  • 对我来说只使用@XmlType 注释定义所有类
  • 这也是我的计划。我认为这个插件不适合我们:-)

标签: java maven jaxb schemagen


【解决方案1】:

通过确保 Java 类注解共享相同的命名空间,我设法让它工作。

   <transformSchemas>
    <transformSchema>
     <uri>http://some/namespace</uri>
     <toPrefix>some</toPrefix>
     <toFile>some_schema.xsd</toFile>
    </transformSchema>
   </transformSchemas>

所有的java类都有:

@XmlRootElement(namespace ="http://some/namespace")
@XmlType(namespace ="http://some/namespace")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多