2

jaxb2-maven-plugin(1.5) を使用した XML のアンマーシャリングで問題が発生しています。基本的に、私の XML ドキュメントには、基本ドメイン クラスであるクラス A であるタイプ B の要素 A があります。 :type="B". しかし、非整列化すると、型 A の Java オブジェクトが返されます。これを解決するにはどうすればよいですか? タイプ B のオブジェクトを取得できる必要があります。XML に xsi:type という表記がある限り、アンマーシャリングできるはずです。それとも、まだ XMLAdapters などが必要ですか?

どうもありがとう。

4

1 に答える 1

2

確認すべき点がいくつかあります。

  • クラスJAXBContextを意識していますか?クラスの作成または追加にB使用するクラスに含めることができます。JAXBContext@XmlSeeAlso({B.class})A
  • Bクラスに対応する型の名前Bですか?デフォルトでは になりますb@XmlType注釈を使用して名前を指定できます。

package forum13712986;

import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso({B.class})
public class A {

}

B

package forum13712986;

import javax.xml.bind.annotation.XmlType;

@XmlType(name="B") // Default name is "b"
public class B extends A {

}

デモ

package forum13712986;

import java.io.StringReader;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(A.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        String xml = "<A xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='B'/>";
        StreamSource source = new StreamSource(new StringReader(xml));
        JAXBElement<A> jaxbElement = unmarshaller.unmarshal(source, A.class);

        System.out.println(jaxbElement.getValue().getClass());
    }

}

出力

class forum13712986.B
于 2012-12-04T22:35:47.833 に答える