我使用NetBeans 7.2(在Windows 7环境中)从我的Web应用程序构建war文件,该文件在NetBeans上下文中使用GlassFish 3.1.2服务器的测试阶段正确运行。
package-info.java
文件中定义的命名空间已正确添加到我的xml文件中。
但是,当我在Linux机器上单独运行GlassFish服务器部署war文件时,命名空间被设置为默认的ns1而不是package-info.java文件定义的那个?
我做错了什么?
此致 杰拉德
答案 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
这个可能有用的扩展程序。