5

我使用 NetBeans 7.2(在 Windows 7 环境中!)从我的 Web 应用程序构建了一个 war 文件,该文件在测试阶段在 NetBeans 上下文中使用 GlassFish 3.1.2 服务器正确运行。

文件中定义的命名空间package-info.java已正确添加到我的 xml 文件中。

但是,当我在 Linux 机器上单独运行的 GlassFish 服务器中部署 war 文件时,命名空间设置为默认 ns1 而不是 package-info.java 文件定义的名称?

我究竟做错了什么?

问候,杰拉德

4

1 回答 1

5

为什么我的 xml 的 JAXB 命名空间设置为默认 ns1?

ns1不是名称空间而是前缀。前缀不重要。例如以下文档都是等效的。foo元素在FOO命名空间中,元素barBAR命名空间中。

<a:foo xmlns:a="FOO" xmlns:b="BAR>
    <b:bar>Hello World</b:bar>
</a:foo>
<ns1:foo xmlns:ns1="FOO" xmlns:ns2="BAR>
    <ns2:bar>Hello World</ns2:bar>
</ns1:foo>
<foo xmlns="FOO" xmlns:b="BAR>
    <b:bar>Hello World</b:bar>
</foo>

我究竟做错了什么?

没有什么。JAXB (JSR-222)实现不需要使用注释中指定的前缀@XmlSchemaEclipseLink JAXB (MOXy)确实如此,并且最近版本的 JAXB RI 似乎如此。NetBeans 7.2 中的 JAXB 版本/实现似乎是这样,而 GlassFish 3.1.2 使用的 JAXB 版本/实现却不是。

下面是我写的一篇文章的链接,该文章更详细地介绍了NamespacePrefixMapper此处可能有用的扩展。

于 2013-01-29T10:37:37.280 回答