我有一个像这样的bean类
@XmlRootElement
public class Node {
String id;
String value;
// Composites, Node is having Node is having Node and so on
ArrayList<Node> nodes = new ArrayList<Node>();
// and getter and setters for all these field.
}
我想使用JAXB封送此对象。默认情况下,它将创建名为“node”的元素,或者如果我们将根注释更改为其他内容(例如@XmlRootElement(name =“someotherName”)),则使用该名称创建。
但是我有数千个Node对象,我希望生成的元素名称应该是Object的“value”属性; e.g。
Node node= new Node("myID", "myValue");
并且在编组之后,它应该像这样生成节点
<myvalue>
<id>myID</id>
</myvalue>
有可能吗?我搜索了很多地方,但没有找到这样的东西。
此外,我希望将“id”属性作为属性(@xmlAttribute),但有条件地说,如果它的子节点(ArrayList)的大小为零,那么我希望将此(id)属性视为属性,否则不会。
由于
-Dharmendra
答案 0 :(得分:0)
这种通用方法
<T> JAXBElement<T> wrap( String ns, String tag, T o ){
QName qtag = new QName( ns, tag );
Class<?> clazz = o.getClass();
@SuppressWarnings( "unchecked" )
JAXBElement<T> jbe = new JAXBElement( qtag, clazz, o );
return jbe;
}
可以应用于Node对象:
Node node = new Node();
node.setId( "id-1" );
node.setValue( "value-1" );
JAXBContext jc = JAXBContext.newInstance( Node.class );
Marshaller m = jc.createMarshaller();
m.marshal( wrap( "", "myvalue", node ), System.out );
生产
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myvalue>
<id>id-1</id>
<value>value-1</value>
</myvalue>
某个字段的变量处理,无论是作为属性还是作为子元素,都是不可能的,并且允许我说:一个坏主意。它与所有良好做法相冲突,这些做法都有一个完善的定义,以便所有相关方知道要写什么和期待什么。