导入到另一个未解组的模式的常见xsd模式

时间:2015-08-07 15:35:17

标签: schema unmarshalling jaxb2

re http://blog.bdoughan.com/2011/12/reusing-generated-jaxb-classes.html

我正在尝试从使用castor切换到jaxb。

我正在将commontypes.xsd架构导入另一个架构,然后使用jaxb生成java类,但是当我取消传输示例XML文件时,导入的类型为null,除非我在示例xml中显式设置了所有命名空间。

这是一个真正的痛苦,因为我希望调用应用程序能够向我发送简单的XML,而不是一个充满了大量命名空间和前缀等的XML。

有关如何避免这样做的任何建议吗?

我使用上面的文章和XJC episode with maven在maven中生成了.episodes文件,但它没有帮助,当我解组时,我仍然得到空值。

有人可以帮忙吗?

感谢

1 个答案:

答案 0 :(得分:1)

我开始工作了!

问题是xjc从我的.xsd文件生成的package-info.java文件将elementFormDefault设置为QUALIFIED

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://www.example.com/commontypes", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
)
package com.example.commontypes;

当我将其更改为不合格并重新编译java代码时,unmarshall随后工作。

根本原因修复在我的.xsd文件中,我设置了elementFormDefault ="不合格"

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"   
    targetNamespace="http://www.example.com/commontypes"     
    xmlns="http://www.example.com/commontypes"  
    elementFormDefault="unqualified" 
    attributeFormDefault="unqualified">

这导致生成以下生成的package-info.java文件

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://www.example.com/commontypes"
)
package com.example.commontypes;
然后,unmarshall再次工作了!

感谢Blaise所做的所有工作,对他的一篇博文发表了评论让我弄明白了!