定义名称空间时,使用maven创建的模式验证XML失败

时间:2013-07-23 13:00:16

标签: java maven jaxb schemagen

在定义名称空间时,使用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不会 将来会得到支持。你有任何意见吗?)

其他信息

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

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

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

1 个答案:

答案 0 :(得分:0)

我已经设法通过确保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")