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

g.v*_*aag 5 java glassfish jaxb

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

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

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

我究竟做错了什么?

此致,杰拉德

bdo*_*han 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>
Run Code Online (Sandbox Code Playgroud)
<ns1:foo xmlns:ns1="FOO" xmlns:ns2="BAR>
    <ns2:bar>Hello World</ns2:bar>
</ns1:foo>
Run Code Online (Sandbox Code Playgroud)
<foo xmlns="FOO" xmlns:b="BAR>
    <b:bar>Hello World</b:bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

没有.使用JAXB(JSR-222)实现不需要使用@XmlSchema注释中指定的前缀. EclipseLink JAXB(MOXy)和JAXB RI的最新版本一样.似乎是NetBeans 7.2中JAXB的版本/实现,而GlassFish 3.1.2使用的JAXB的版本/实现则没有.

下面是我写的一篇文章的链接,其中详细介绍了NamespacePrefixMapper一些可能有用的扩展.