2010-01-25 99 views
2

我正在使用JAXB从Java对象生成XML,它是一个实时,相当高的消息速率应用程序,并且大多数时间都正常工作。然而偶尔,并没有任何明显的线索,为什么,我在生成的XML中获得重复的名称空间声明。例如:JAXB生成的XML中的重复名称空间声明

<UpdateRequest xmlns="http://xml.mycomp.com/ns/myservice" 
       xmlns="http://xml.mycomp.com/ns/myservice"> 
    <field1>value</field1> 
    ... 
</UpdateRequest> 

有没有人见过这种行为?

+1

奇怪...你可以发布生成此XML的JAXB注释的java类吗? – skaffman 2010-01-25 09:54:38

+0

我也想要,但我不认为公司会喜欢它。奇怪的是,99.9%的对象被编组的时间确定,那么偶尔我们会遇到这个问题。我们现在假设多线程问题.. – ashbyp 2010-01-28 18:11:46

回答

0

检查此类的xsd代码是否允许创建多个重复属性的实例。如果是这样,您可以避免这种重复设置每个UpdateRequest对象的属性实例的数量。

如果问题出在你的代码上(也许有两次创建这个属性),并且你限制了属性实例的数量(如我上面所说的),程序会在运行时显示错误,抱怨你试图插入已经定义的属性。

+0

谢谢,但它不是一个重复的属性,它是XML顶层元素中重复的xmlns =“blah” – ashbyp 2010-01-28 18:12:44

0

解决方案可能在此link处可用。

这里的相关部分从上面的链接逐字引述可能对您相关:

如果您在使用实例化一个JAXB 元素在实例文档中的元素 架构 类型的类似明确纳入发生一些 (抽象)XML模式基本类型的对象,因此 该元素将具有基本类型的元素标记 。

二忌的xs:anySimpleType因为 这也将创建多个 引用结合到 的xsi和xs的命名空间,以及类型属性包含实际类型 。你 失去了在Java类中已经输入 领域的JAXB的优势,使 你失去所有的检查Java编译器 可能会做,并为 解组,你必须自己处理 所有的转换。