XML文字列である文字列があり、jaxbで生成されたスキーマファイルであるいくつかのオブジェクトの1つに対応する可能性があります。
事前にどんなオブジェクトかわかりません。
- この XML 文字列を jaxb xml オブジェクトに変換するにはどうすればよいですか? ある種のアンマーシャリング?
- 割り当てられているオブジェクトを特定するにはどうすればよいですか?
- xml 文字列からオブジェクトに変換されたオブジェクトをインスタンス化するにはどうすればよいですか?
次のようなことができます。
フー
@XmlRootElement
orアノテーションを介してクラスに関連付けられたルート要素がある限り、@XmlElementDecl
アンマーシャリングするクラスのタイプを指定する必要はありません ( http://blog.bdoughan.com/2012/07/jaxb-を参照)。 and-root-elements.html )。
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Foo {
private String bar;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
デモ
から非整列化するには、 のインスタンスで をString
ラップするだけです。この操作により、XML がドメイン クラスのインスタンスに変換されます。どのクラスを使用するか、またはそのタイプを判別する必要があるかわからない場合。String
StringReader
unmarshal
instanceof
getClass()
import java.io.StringReader;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
String xml = "<foo><bar>Hello World</bar></foo>";
StringReader reader = new StringReader(xml);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Object result = unmarshaller.unmarshal(reader);
if(result instanceof Foo) {
Foo foo = (Foo) result;
System.out.println(foo.getBar());
}
}
}
出力
Hello World
Unmarshaller yourunmarshaller = JAXBContext.NewInstance(yourClass).createUnMarshaller();
JAXBElement<YourType> jaxb = (yourunmarshaller).unmarshal(XMLUtils.getStringSource([your object]), [the class of your object].class);
XML オブジェクトのスキーマ ファイルがある場合 (JAXB を使用している場合)、XML に対して検証を実行します。