JaxB编组通配符泛型扩展类

萨拉瓦南S

编组Java类时遇到问题。

在代码段1中,使用A类,List<B>而代码段2中使用List<B<? extends C>>

代码段1产生 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><a><test><item><name>Success!!</name></item></test></a>

而摘要2缺少C类中的数据 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><a><test/></a>

有人可以帮我解决这个问题吗?

片段1:

public class JaxBXMLTest {
@Test
public void testMarshalling() throws JAXBException{
    testBaseClass();
}

private void testBaseClass()  throws JAXBException{
    A resp = new A();
    C test = new C();
    test.setName("Success!!");
    List<B> data = new ArrayList<B>();
    B wrap = new B();
    wrap.setItem(test);
    data.add(wrap);
    resp.setTest(data);

    JAXBContext context = JAXBContext.newInstance(A.class);
    Marshaller m = context.createMarshaller();
    //for pretty-print XML in JAXB

    // Write to System.out for debugging
     m.marshal(resp, System.out);
}

@XmlRootElement
@XmlType(name = "MyResponse")
public static class A{
    List<B> test;

    public List<B> getTest() {
        return test;
    }

    public void setTest(List<B> test) {
        this.test = test;
    }

}

public static class B{
    private C item;

    public C getItem() {
        return item;
    }

    public void setItem(C item) {
        this.item = item;
    }
}
public static class C{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

}

片段2:

public class JaxBXMLTestB {
@Test
public void testMarshalling() throws JAXBException {
    testSubClass();
}

private void testSubClass() throws JAXBException {
    A resp = new A();
    C test = new C();
    test.setName("Failure!!!");

    B<? extends C> wrap = new B<C>();
    wrap.setItem(test);

    List<B<? extends C>> finalObj = new ArrayList<B<? extends C>>();
    finalObj.add(wrap);
    resp.setTest(finalObj);

    JAXBContext context = JAXBContext.newInstance(A.class);
    Marshaller m = context.createMarshaller();
    // for pretty-print XML in JAXB
    // m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

    // Write to System.out for debugging
    m.marshal(resp, System.out);
}

@XmlRootElement
@XmlType(name = "MySubClassResponse")
public static class A {
    List<B<? extends C>> test;

    public A(){
        test = new ArrayList<B<? extends C>>();
    }

    public List<B<? extends C>> getTest() {
        return test;
    }

    public void setTest(List<B<? extends C>> test) {
        this.test = test;
    }
}

public static class B<T extends C> {
    private T item;

    public T getItem() {
        return item;
    }

    public void setItem(C item) {
        this.item = (T) item;
    }
}

public static class C {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

}

萨拉瓦南S

最终发现,添加@XmlAnyElement(lax=true)到字段中即可解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java泛型中的边界扩展通配符

来自分类Dev

Java泛型中的边界扩展通配符

来自分类Dev

泛型类和通配符的上限

来自分类Dev

扩展集合泛型类的泛型类

来自分类Dev

如何将泛型类扩展为泛型

来自分类Dev

具有“扩展”和“超级”的泛型通配符

来自分类Dev

Typescript泛型扩展类和接口

来自分类Dev

用泛型T扩展类

来自分类Dev

在Kotlin中扩展泛型类

来自分类Dev

使用泛型和扩展Abstract类

来自分类Dev

Java:使用泛型扩展类

来自分类Dev

CDI bean从泛型类扩展

来自分类Dev

打字稿泛型-扩展类

来自分类Dev

泛型扩展某个类的问题

来自分类Dev

在java中扩展多个类的泛型

来自分类Dev

Java 泛型:如何扩展另一个泛型类的泛型类

来自分类Dev

JAXB编组期间的类转换

来自分类Dev

JAXB编组期间的类转换

来自分类Dev

从Object,泛型类和通配符未经检查的类型转换

来自分类Dev

如何在泛型类上调用通配符方法?

来自分类Dev

如何将复杂的泛型方法应用于通配符泛型类型的类?

来自分类Dev

Java泛型:定义泛型类时的通配符和类型参数语法

来自分类Dev

Java泛型-使用泛型函数扩展泛型类

来自分类Dev

扩展泛型类的类的错误覆盖方法

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

C#泛型:通配符

来自分类Dev

Java泛型中的通配符