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

时间:2013-01-29 09:03:43

标签: java jaxb glassfish

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

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

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

我做错了什么?

此致 杰拉德

1 个答案:

答案 0 :(得分:5)

  

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

ns1不是命名空间,而是前缀。前缀不重要。例如,以下文件都是等同的。 foo元素位于FOO命名空间中,bar元素位于BAR命名空间中。

<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>

  

我做错了什么?

无。使用@XmlSchema注释中指定的前缀不需要JAXB (JSR-222)实现。 EclipseLink JAXB (MOXy)确实和最近版本的JAXB RI出现了。似乎是NetBeans 7.2中JAXB的版本/实现,而GlassFish 3.1.2使用的JAXB版本/实现则不然。

以下是我撰写的文章的链接,该文章详细介绍了NamespacePrefixMapper这个可能有用的扩展程序。