xml输出中缺少使用jaxb封送xmlns属性

xml输出中缺少使用jaxb封送xmlns属性,xml,xsd,jaxb,xml-namespaces,Xml,Xsd,Jaxb,Xml Namespaces,我有一些jaxb对象是从我创建的xsd生成的。在前面我整理内容时,xml输出如下所示: <report xmlns="urn:com-test-person-data:v3"> <person-data> .......(Data) </person-data> </report> 有什么想法吗?这个问题通常是由于package-info.java没有与其他模型类一起编译或打包造成的。package info类是指定@XmlSchema的

我有一些jaxb对象是从我创建的xsd生成的。在前面我整理内容时,xml输出如下所示:

<report xmlns="urn:com-test-person-data:v3">
<person-data>
    .......(Data)
</person-data>
</report>

有什么想法吗?

这个问题通常是由于package-info.java没有与其他模型类一起编译或打包造成的。package info类是指定@XmlSchema的地方,其中包含名称空间信息。

我使用的jar中包含所有jaxb类,它也包含package info类。我多次尝试重新构建该组件,当我的消费者将其拉入时,我看到参考库中jar下的package-info.class。尽管如此,我的xml输出仍然没有该属性。我对这一切都是新手,所以还有什么我可能遗漏的吗?@vogelj-包信息类和Report在同一个包中吗?如果您对设置JAXB_FRAGMENT属性的行进行注释,您是否也会看到相同的行为?是的,包信息与报告位于同一个包中。如果我删除JAXB_片段属性,上述行为是相同的。当然,除了现在输出xml标记之外。我总是把它作为一个片段输出,这就是为什么它看起来完全是无中生有的。今天,我发现这个jar的使用者获得了预期的带有版本信息的xml。但是如果他们运行Junit,它不会返回xmlns属性。这让我们在这个问题上更加困惑。你封送到的sw是什么类型的对象?对不起,你应该发布它。它是java.io.StringWriter的一个实例。
<report>
<person-data>
    .......(Data)
</person-data>
</report>
final JAXBContext context = JAXBContext.newInstance(Report.class);
final Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); //$NON-NLS-1$
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(reportJaxBObject, sw);