[英]JAXB multiple @XmlRootElement
我有一个类注释如下:
@XmlRootElement(name="response")
@XmlType(propOrder={"paymentid",
"result",
"responsecode",
"authorizationcode",
"merchantorderid",
"rrn",
"cardcountry",
"cardtype"})
public class MOTOResponseIn {
...
}
除了response 之外,映射的 XML 的根元素也可能是error 。
如何注释类以便允许两个根元素?
在这种情况下,不能使用@XmlRootElement。 你必须使用ObjectFactory。 @XmlElementDecl批注用于表示与命名复杂类型对应的根元素。 它放在使用@XmlRegistry注释的类中的工厂方法中(当从XML模式生成时,此类始终称为ObjectFactory)。 工厂方法返回包装在JAXBElement实例中的域对象。希望这个url会有所帮助。
使用单个类和 @XmlRootElement 是不可能的。 但是,如果您不想弄乱 ObjectFactory,为了快速解决,您可以使用抽象类和具体类。 (假设唯一的区别是根元素)
例子:
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class MOTOabstract{
@XmlAttribute
private String paymentid;
@XmlAttribute
private String result
@XmlAttribute
private String responsecode;
...
}
@XmlRootElement(name="response")
@XmlAccessorType(XmlAccessType.FIELD)
public class MOTOresponse extends MOTOabstract{}
@XmlRootElement(name="error")
@XmlAccessorType(XmlAccessType.FIELD)
public class MOTOerror extends MOTOabstract{}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"id",
"name",
"serviceAttrs"
})
@XmlSeeAlso({ AddGroup.class, AddGroupRequest.class })
public class AddGroupAbstract {
@XmlElement(required = true)
protected String id;
@XmlElement(required = true)
protected String name;
@XmlElement(required = true)
protected ServiceAttrs serviceAttrs;
...
}
@XmlRootElement(name = "addGroup")
public class AddGroup extends AddGroupAbstract {}
@XmlRootElement(name = "addGroupRequest")
public class AddGroupRequest extends AddGroupAbstract {}
@Endpoint
public class GroupEndpoint {
private final GroupService groupService;
private final ServiceService serviceService;
private final RestTemplate restTemplate;
public GroupEndpoint(GroupService groupService, ServiceService serviceService, RestTemplate restTemplate) {
this.groupService = groupService;
this.serviceService = serviceService;
this.restTemplate = restTemplate;
}
@PayloadRoots({
@PayloadRoot(namespace = SoapConstants.NAMESPACE_ACCOUNT_URI, localPart = "addGroup"),
@PayloadRoot(namespace = SoapConstants.NAMESPACE_ACCOUNT_URI, localPart = "addGroupRequest")
})
@ResponsePayload
public AddGroupResponse addGroup(@RequestPayload AddGroupAbstract request) {
AddGroupResponse response = new AddGroupResponse();
...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.