3

私は JAXB 2.1 を使用していますが、表示される XML 出力に混乱しています。以下には、同じ親を拡張する 2 つの子クラスがあります。REST を使用してブラウザーでマーシャリングされ、XML として表示されると、子クラス 1 (GeoLocationDecodedPayload) には、予想どおりgeoLocationDecodedPayloadのルート要素が常に含まれます。何らかの理由で、子クラス 2 (AltitudeDecodedPayload)には、@XMLRootElement アノテーションで指定されているように予期しないルート要素として高度DecodedPayloadがありません。XML 出力は、 geoPayload のスーパー クラス (GeoPayload) @XMLRootElement を示しています。これら 2 つのクラスの動作が異なる理由は何ですか?

子クラス 1:

package com.api.model.vo.decoder;

import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import com.api.util.decoder.DecoderConstants;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "geoLocationDecodedPayload")
public class GeoLocationDecodedPayload extends GeoPayload implements Serializable {

   public GeoLocationDecodedPayload() {}

}

子クラス 2:

package com.api.model.vo.decoder;

import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import com.api.util.decoder.DecoderConstants;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "altitudeDecodedPayload")
public class AltitudeDecodedPayload extends GeoPayload implements Serializable {

    public AltitudeDecodedPayload() {}

}

親クラス:

package com.api.model.vo.decoder;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "geoPayload")
public class GeoPayload {

    public GeoPayload() {}
}
4

1 に答える 1

1

以下に AltitudeDecodedPayload.class を含めるのを忘れていました。これで問題が解決しました。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="payloadResponse")
public class PayloadResponse extends AbstractResponse{
    @XmlElementWrapper(name="decodedPayloads")
    @XmlElementRefs({
        @XmlElementRef(type=GeoPayload.class),
        @XmlElementRef(type=GeoLocationDecodedPayload .class),
        @XmlElementRef(type=AltitudeDecodedPayload .class) 
于 2012-11-22T18:02:05.270 に答える