JAXB XMLをデシリアライズするための標準的なアプローチは、コンテキストを作成するときにパッケージ名を指定することです。私は、パッケージ名を指定する必要はありませんし、まだ任意のオブジェクトをデシリアライズすることができ、より柔軟なアプローチを探していますJAXBはクラス名をXMLに格納できるため、デシリアライズコードでクラスの知識は必要ありません。
JAXBContext jc = JAXBContext.newInstance("com.foo");
Unmarshaller u = jc.createUnmarshaller();
Object o = u.unmarshal(new StringReader("<?xml version="1.0" encoding="UTF-8" standalone="yes"?><MyJaxb>..."));
:その後、JAXBはルート要素に基づいて、クラスを検索します。これはJAXBがXMLにパッケージを格納するのと同じくらい簡単ですが、これを行う方法を見つけることができません。私は自分でそれを行うコードを書くことができますが、それは不愉快です。可能であれば、JAXBにそれをやりたいと考えています。ところで、私はスキーマを使用していません、注釈とマーシャル/アンマーシャルだけです。何か案は?
クラスパス内のオブジェクトを逆シリアル化する機能が必要です。例:Object o = u.unmarshal(...);すべての可能なパッケージを指定せずに、新しいパッケージでクラスを追加するときに、リストを更新する必要はありません。パッケージ名をXMLに格納するだけです。私はGSONがこれを行うと思います。 – Andrew
@Andrew。デシリアライズして何をしますか?それが問題でした。あなたはJavaでObjectを使うことはほとんどできませんが、JSに渡すとかなり多くのことができます。 – Osw
Object(リフレクションなど)でできることはたくさんあります。これが私の必要です。私のソリューションはXMLにパッケージ名を追加するように見えます。 – Andrew