在http://blog.bdoughan.com/2013/06/moxy-is-new-default-json-binding.html大約一半的時候有一個標題「自定義JSON綁定」。你如何類似地自定義XML綁定?澤西島+ Moxy + JAXB - 如何編組沒有註釋的XML
Jersey處理Moxy JSON綁定和XML等價物的方式似乎存在根本差異。如果按照Jersey文檔中的說明創建自定義JAXBContext解析器來配置Moxy的映射文件,那麼解析器將在JSON情況下觸發,而不是在XML情況下觸發。看到https://bitbucket.org/jmetcher/resttest/爲一個非常小的項目演示這一點。
我擁有正確的jaxb.properties文件,並且正在使用jersey-media-moxy模塊進行構建。我可以在獨立模式下獲得相同的Moxy JAXB設置,但我無法讓Jersey注意到它。
我所做的調試表明,要實現這個功能的唯一方法是創建一個自定義的MessageBodyWriter。 jersey-media-moxy模塊註冊一個JSON MessageBodyWriter,然後它將調用任何已註冊的ContextResolver。它沒有爲XML註冊等效的MessageBodyWriter,並且Jersey的默認MBW似乎完全忽略了註冊的ContextResolver。
不管怎樣,創建自定義MessageBodyWriter的需求從文檔中完全沒有,幾乎每個示例都似乎表明我缺少一些基本的東西。
我會提供更多信息的鏈接,但我似乎沒有代表在SO上做很多事情。
編輯:在回答更多信息以註釋:
莫西肯定是被拾起爲JAXB提供商。我可以在調試器中看到這一點。
Jersey版本是2.9,EclipseLink版本是2.5。 Java 7.
ContextResolver方法適用於JSON。在Application類中註冊MoxyXMLFeature的方法也是如此。在這兩種情況下,均使用使用正確的映射文件配置的正確上下文。在XML案例中,澤西似乎從未嘗試創建上下文。
但是,如果我將@XmlRootElement註釋添加到我試圖編組的類中,這一切都可行。即使沒有其他註釋,根據oxm映射文件,該類可以封送到XML和JSON。我已經更新了bitbucket項目來展示這一點。
因此,我可以通過創建自定義MBW或提供註釋的根類來解決此問題。我想在這一點上,我要制定出最好或推薦的方法,以便我可以記錄文檔補丁。
Blaise,謝謝你的回答。手動創建JAXBContext可以正常工作 - 從最後一個鏈接中選擇#1和選項#2。問題是,在澤西島,JAXBContext根本就沒有創建完全沒有註解的類。澤西島的默認XML MBW似乎決定前面,因爲沒有註釋它不能處理類,並在那裏炸彈 - 儘管事實上,如果它實際上創建JAXBContext都會正常工作。 – jmetcher