使用来自qbxml xsd schema的JAXB xjc生成的类时出错

时间:2012-11-25 19:50:14

标签: xml jaxb xsd qbxml

我试图生成可以在以下位置找到的验证器xsd文件中使用的类:

C:\Program Files\Intuit\IDN\Common\tools\validator

我跑:

xjc qbxmltypes.xsd qbxml.xsd qbxmlso.xsd qbxmlops.xsd

该工具会生成'生成的'目标和类文件按预期方式。但是,这些课程似乎不能正常工作。我将这些类添加到我的项目中,重新打包它们,一切都编译得很好。当我创建一个新的JAXBContext对象时:

JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);

以正常的方式,这编译得很好,但我在System.err中得到运行时错误(很多,重复相同的行),读取:

No XmlSchema annotation found for [packagenamehere]

我在包路径中搜索XmlSchema的用法,但没有找到。 JAXB显然在运行时需要这个。

我使用的是错误的.xsd文件吗?我应该将XmlSchema注释添加到ObjectFactory.java类吗?我在这做错了什么?我想我只是用xjc构建错误的类。我应该编译哪些.xsd文件?

1 个答案:

答案 0 :(得分:1)

XJC实用程序将根据目标命名空间将类生成到包名称中。如果没有默认值,它会将它们放在一个名为generated的包中。您可以提供包名称作为参数。

xjc -p com.example.foo schema.xsd

我建议将每个模式生成到一个单独的包中。从XML模式生成的类创建JAXBContext时,我总是建议在包名称上执行此操作。如果有多个包名称,只需将它们与.字符分开。

JAXBContect jc = JAXBContext.newInstance("com.example.foo:com.example.bar");