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文件,但它没有帮助,当我解组时,我仍然得到空值。
有人可以帮忙吗?
感谢
答案 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所做的所有工作,对他的一篇博文发表了评论让我弄明白了!