JAXB - List<Serializable>?

4

我使用xjc创建了一些类。

    public class MyType {

    @XmlElementRefs({
        @XmlElementRef(name = "MyInnerType", type = JAXBElement.class, required = false),

    })
    @XmlMixed
    protected List<Serializable> content;

    public List<Serializable> getContent() {
        if (content == null) {
            content = new ArrayList<Serializable>();
        }
        return this.content;
    }
}

但是我无法使用

添加内部元素。

getContent().add(newItem);

因为MyInnerType不可序列化。为什么它不是对象列表?我如何添加内部元素?

我的内部类型不可序列化。 - bunnyjesse112
3个回答

5
请看这里这里(一定要解决你的情况)。 来自第二个链接:
<!-- schema fragment having  mixed content -->
<xs:complexType name="letterBody" mixed="true">
<xs:sequence>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="quantity" type="xs:positiveInteger"/>
    <xs:element name="productName" type="xs:string"/>
    <!-- etc. -->
</xs:sequence>
</xs:complexType>
<xs:element name="letterBody" type="letterBody"/>


// Schema-derived Java code: 
// (Only annotations relevant to mixed content are shown below, 
//  others are ommitted.)
import java.math.BigInteger;
public class ObjectFactory {
    // element instance factories
    JAXBElement<LetterBody> createLetterBody(LetterBody value);
    JAXBElement<String>     createLetterBodyName(String value);
    JAXBElement<BigInteger> createLetterBodyQuantity(BigInteger value);
    JAXBElement<String>     createLetterBodyProductName(String value);
  // type instance factory
    LetterBody> createLetterBody();
}

public class LetterBody {
    // Mixed content can contain instances of Element classes
    // Name, Quantity and ProductName. Text data is represented as
    // java.util.String for text.
    @XmlMixed 
    @XmlElementRefs({
            @XmlElementRef(name="productName", type=JAXBElement.class),
            @XmlElementRef(name="quantity", type=JAXBElement.class),
            @XmlElementRef(name="name", type=JAXBElement.class)})
    List getContent(){...}
}

这真的很有帮助。感谢提供链接! - Arun Christopher
链接已损坏。请提供新链接。 - ulab

1
你认为应该在那里添加什么?我曾使用过类似的生成方式,这些字段的期望是字符串内容。
可能有帮助的是展示生成此代码的XSD文件。

谢谢回答。MyInnerType不是String类型。为什么它生成List<Seriazible>而不是List<Object>?我需要将MyInnerType包装在JAXBElement中或者其他什么吗? - bunnyjesse112
1
听起来这是个好主意,因为你的对象不可序列化。但是为什么不让你的对象可序列化呢?这只是实现接口的问题。 - AHungerArtist

0

现在可能对某些人有帮助。

你必须使用:

getContent().add(new JAXBElement<>(new QName("MyInnerType"), MyInnerType.class, myInnerTypeInstance);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接