JAXB注释类:
@XmlRootElement(name = "group")
@XmlType(propOrder = {"name", "description", "types" })
public class GroupElement implements Serializable {
private static final long serialVersionUID = 1L;
private long id;
private String description;
private String name;
private List<TypeElement> types;
@XmlTransient
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@XmlElement(name = "description")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@XmlElement(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "type")
public List<TypeElement> getTypes() {
return types;
}
public void setTypes(List<TypeElement> types) {
this.types= types;
}
}
java-package.info
@XmlSchema(namespace = "http://www.test.at/r1/v1" ,
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns={@XmlNs(prefix="cdr1", namespaceURI="http://www.test.at/r1/v1")})
JAXB编组:
JAXBContext jaxbContext = JAXBContext.newInstance(Group.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(group, sw);
我需要根据组动态设置命名空间。使用package-info方法,我在每个XML文件中都获得相同的命名空间。
我也试过
JAXBElement<Group> element = new JAXBElement<Group>(new
QName(latestStructure.getNamespace(), "group", "cdr1"),
Group.class, group);
但是使用这种方法只有根元素获得分配的命名空间和前缀。
有没有人知道如何做到这一点?
答案 0 :(得分:0)
您可以从类和包中删除命名空间信息,但是创建具有限定名称的对象工厂(以便许多对象工厂具有尽可能多的命名空间),
@XmlRegistry
public class ObjectFactory {
...
}
然后使用正确的工厂来启动您的上下文而不是Group类:
JAXBContext.newInstance(ObjectFactory.class);
对我来说,更容易再次使用没有名称空间的bean,marshall命名空闲的xml并使用xslt转换xml以添加正确的&#34; dynamic&#34;命名空间。