因此,我试图封送对象的一般列表,但我希望每个列表都具有特定的XmlRootElement(name
..)。我这样做的方式,我知道如果没有为每种类型的对象编写特定的包装器类并声明XmlRootElement,这实际上是不可能的。但是也许还有另一种方式…?
考虑以下类别:
abstract public class Entity {
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="user")
public class User extends Entity {
private String username;
public String getUsername() {
return username;
}
public void setUsername( String username ) {
this.username = username;
}
}
@XmlRootElement
public class EntityList<T extends Entity> {
@XmlAnyElement(lax=true)
private List<T> list = new ArrayList<T>();
public void add( T entity ) {
list.add( entity );
}
public List<T> getList() {
return list;
}
}
public class Test {
public static void main( String[] args ) throws JAXBException {
User user1 = new User();
user1.setUsername( "user1" );
User user2 = new User();
user2.setUsername( "user2" );
EntityList<User> list = new EntityList<User>();
list.add( user1 );
list.add( user2 );
JAXBContext jc = JAXBContext.newInstance( EntityList.class, User.class );
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal( list, System.out );
}
}
如预期的那样,将产生:
<entityList>
<user>
<username>user1</username>
</user>
<user>
<username>user2</username>
</user>
</entityList>
我想要的是能够修改标签名称,具体取决于我创建EntityList所使用的实体的类型。
我知道我们在这里谈论的是编译与运行时,但是也许有某种hacky的方式可以从子级更改父级元素包装器?
您可以将EntityList的实例包装在JAXBElement中,以在运行时提供根元素名称。
例
我有几个关于JAXB编组的简单问题。我正在尝试封送包含以下字段的类: 只需使用以下序列化代码: 我得到的输出是: 现在,我面临的问题如下: > 我想要名称空间xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“出现在根元素中,即TokenRestrictionTemplate中,而不是单个子元素中。如何实现这一点? 我有一些元素,例如带有@Xm
问题内容: 我有一个无法控制其生成方式的XML。我想通过将其分解为我手工编写的类来创建一个对象。 其结构的一个片段如下所示: 我该如何处理这种情况?当然,元素数是可变的。 问题答案: 如果使用以下对象模型,则每个未映射的key_#元素都将保留为org.w3c.dom.Element的实例: 如果任何元素对应于使用@XmlRootElement批注映射的类,则可以使用@XmlAnyElement(l
仅当我从 XML 文件内的所有元素中删除“bpmn:”时,此代码才有效,否则它会引发以下异常: javax.xml.bind.UnmarshalException:意外元素(URI:"http://www.omg.org/spec/BPMN/20100524/MODEL",local:"定义") 我试图在不修改XML文件的情况下使其工作。任何帮助将不胜感激。提前致谢 :)
问题内容: 我认为对于真正了解JAXB绑定文件的人来说这很容易… 基本问题 如何配置JAXB将多个元素解组到同一类中? 注意:我想避免向我的项目中添加另一个依赖项(例如MOXy)。 理想情况下,这可以通过注释或自定义绑定文件来完成。 背景 我有一个XML文档,其中包含许多相同元素的变体,每个变体具有完全相同的属性。在下面的示例中,我只关心“雇员”,但是XML指定了“董事,经理和职员”。出于我们的目
是否有一种使用JAXB从非根元素以编程方式获取名称空间的方法? 我可以在根元素上使用以下内容(其中DetailedReport是根元素对象): 但是,如果我尝试使用来自同一个包的类型,但不是根元素,qname为null。 根据JAXBIntrospector的javadocs: 参数对象是以下情况的JAXB元素: 它是javax.xml.bind.JAXBElement的实例,object的类用@
问题内容: 给定初始XML(BPEL)文件: 我编写了一个使用JAXB的函数,以修改XML内的某些数据。功能如下: 与JAXB相关的编辑之后的结果XML为: 不幸的是,由于解析新XML时XML解析器崩溃,因此生成的XML不符合我们的应用程序。 所以: 如何在生成的XML中删除名称空间? 如何在初始XML文件中保留相同的标头(缺少)? 谢谢! 问题答案: 如果使用MOXy JAXB实现,则可以执行以