2012-11-25 36 views
1

我想要生成,我可以從驗證XSD文件使用類的類中發現:誤差產生從qbxml XSD架構

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

我運行:

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

並且該工具按預期生成'generated'目錄和類文件。但是,這些類似乎不能正常工作。我將這些類添加到我的項目中,重新打包它們,並且一切都很順利。當我創建因此新的JAXBContext對象:

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

以正常的方式

,這個編譯就好了,但我得到的運行時錯誤(他們很多,重複同一條線路)在System.err的,上面寫着:

No XmlSchema annotation found for [packagenamehere]

我搜索的XmlSchema的用途包路徑,並沒有找到。 JAXB顯然需要在運行時。

我使用錯誤的.xsd文件嗎?我應該將XmlSchema註釋添加到ObjectFactory.java類中嗎?我在這裏做錯了什麼?我想我只是用xjc來構建錯誤的類。我應該編譯哪個.xsd文件?

回答

1

XJC實用程序將根據目標名稱空間將類生成爲包名。如果默認情況下沒有,它會將它們放入一個名爲generated的包中。您可以提供一個包名稱作爲參數。

xjc -p com.example.foo schema.xsd 

我建議生成你的每個模式到一個單獨的包。當從XML模式生成的類中創建JAXBContext時,我總是建議對包名進行此操作。當有多個包名時,只需使用.字符將它們分開即可。

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

這與手頭的問題無關lol。而且你沒有徹底讀懂這個問題。 – moonlightcheese

+1

@moonlightcheese - 我重讀你的問題,我相信我說的一切仍然適用。指定'-p'標誌消除了重新包裝你的類的需要。而在包名上創建'JAXBContext'而不是'ObjectFactory'將會更好地爲你工作。 –

+0

感謝您的回覆。我確實嘗試了你在這裏發佈的信件。從模式重建類並使用JAXB類所在的包中的JAXBContext.newInstance(「com.example.qbxml.jaxb」)。同樣的問題仍然存在。我瀏覽了這個:[XmlSchema](http://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlSchema.html),好像JAXB想要定義這個註釋在一個名爲package-info.java的文件中。 – moonlightcheese