- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我创建了三个 JAXB 类:Home , Person , Animal
. Java类首页有变List<Object> any
可能包含 Person 和/或 Animal 实例。
public class Home {
@XmlAnyElement(lax = true)
protected List<Object> any;
//setter getter also implemented
}
@XmlRootElement(name = "Person") // Edited
public class Person {
protected String name; //setter getter also implemented
}
@XmlRootElement(name = "Animal") // Edited
public class Animal {
protected String name; //setter getter also implemented
}
/* 解码后 */
Home home ;
for(Object obj : home .getAny()){
if(obj instanceof Person ){
Person person = (Person )obj;
// .........
}else if(obj instanceof Animal ){
Animal animal = (Animal )obj;
// .........
}
}
我需要实现 Person or Animal
对象保存在 "Home.any" List
可变但 "Home.any" List
的内容是 com.sun.org.apache.xerces.internal.dom.ElementNSImpl
的实例而不是 Animal or Person
.
那么有没有办法实现Animal or Person
"Home.any" List
中保存在 xml 中的实例.
最佳答案
您需要在您希望在用 @XmlAnyElement(lax=true)
注释的字段/属性中显示为实例的类上添加 @XmlRootElement
。
首页
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Home {
@XmlAnyElement(lax = true)
protected List<Object> any;
//setter getter also implemented
}
人
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Person")
public class Person {
动物
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Animal")
public class Animal {
}
输入.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Person/>
<Animal/>
<Person/>
</root>
演示
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws JAXBException {
JAXBContext jc = JAXBContext.newInstance(Home.class, Person.class, Animal.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StreamSource xml = new StreamSource("src/forum20329510/input.xml");
Home home = unmarshaller.unmarshal(xml, Home.class).getValue();
for(Object object : home.any) {
System.out.println(object.getClass());
}
}
}
输出
class forum20329510.Person
class forum20329510.Animal
class forum20329510.Person
关于java - JAXB 解码 @XmlAnyElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329510/
我试图在一个对象的两个不同版本上保存数据,但没有成功。谁能告诉我我做错了什么? 版本一: [DataContract (Name="Person")] public class Person_V1
我创建了三个 JAXB 类:Home , Person , Animal 。 Java类首页有变量List any可能包含 Person 和/或 Animal 实例。 public class
我使用以下带注释的类通过 MOXy 2.4.0 进行解码。解码到该对象中效果很好 @XmlElementRefs({ @XmlElementRef(name = "a", namesp
我创建了三个 JAXB 类:Home , Person , Animal . Java类首页有变List any可能包含 Person 和/或 Animal 实例。 public class
我在这些论坛以及其他博客文章中阅读了很多答案,但我似乎无法将这些部分联系在一起。 因此,我们从包含 Map 属性的基本 POJO 开始。已经确定如何包装它,但它会返回一些值。我要做的是命名(又名标签)
我有这门课 public class Header { @XmlAnyElement(lax = true) protected List any; // getters/se
我有一个用 JAXB 注释的简单 Java 类: class Foo { @XmlAnyElement(lax=true) List any; } 生成以下架构:
我想实现类似 this 的目标. ... ... 我这里有这门课。 public class MainGroup { private List widgets;
我正在尝试实现涉及 HashMap 的 XML 映射。这是我的用例:我想得到这个: VALUE_1 VALUE_2 VALUE_3 我的 UserParameters 类如
下面是我从 XSD 文件生成的文件 TPAExtensionsType.java。 TPAExtensionsType.java /* * The following schema fragment
我正在尝试处理来自网络服务的 SOAP 响应。我使用 wsimport 工具生成用于处理 SOAP 响应的客户端类。下面是示例 SOAP 响应和 Java 处理程序。 SOAP react :
为了了解如何使用@XmlAnyElement,我创建了以下测试服务: @WebService(serviceName = "TestServices") @Stateless() public cla
我是一名优秀的程序员,十分优秀!