解析SSO服务响应XML:将XML代码映射到Java实体类
<sso:serviceResponse xmlns:sso='http://www.yale.edu/tp/cas' xmlns:cas='http://www.yale.edu/tp/cas'> sso:authenticationSuccess sso:user04145</sso:user> cas:attributes cas:ID_NUMBER04145</cas:ID_NUMBER> cas:USER_FIRST_LOGIN4</cas:USER_FIRST_LOGIN> cas:USER_NAME郭晓航</cas:USER_NAME> cas:checkAliveTicketTGT-04145-4-BUfTzobYE5xpOcPnZN5tq1dCeMOHHDaCJgDRlYjBIxOcZGWtnE-tpass</cas:checkAliveTicket> cas:serviceId2897800439685120</cas:serviceId> </cas:attributes> sso:attributes <sso:attribute name='id_number' type='java.lang.String' value='04145'></sso:attribute> 如何解析成实体类内容:这段XML代码可以解析成以下实体类:
@XmlRootElement(name = "serviceResponse", namespace = "http://www.yale.edu/tp/cas")
@XmlAccessorType(XmlAccessType.FIELD)
public class ServiceResponse {
@XmlElement(name = "authenticationSuccess", namespace = "http://www.yale.edu/tp/cas")
private AuthenticationSuccess authenticationSuccess;
// getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class AuthenticationSuccess {
@XmlElement(name = "user", namespace = "http://www.yale.edu/tp/cas")
private String user;
@XmlElement(name = "attributes", namespace = "http://www.yale.edu/tp/cas")
private Attributes attributes;
@XmlElement(name = "sso:attributes", namespace = "http://www.yale.edu/tp/cas")
private SsoAttributes ssoAttributes;
// getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Attributes {
@XmlElement(name = "ID_NUMBER", namespace = "http://www.yale.edu/tp/cas")
private String idNumber;
@XmlElement(name = "USER_FIRST_LOGIN", namespace = "http://www.yale.edu/tp/cas")
private String userFirstLogin;
@XmlElement(name = "USER_NAME", namespace = "http://www.yale.edu/tp/cas")
private String userName;
@XmlElement(name = "checkAliveTicket", namespace = "http://www.yale.edu/tp/cas")
private String checkAliveTicket;
@XmlElement(name = "serviceId", namespace = "http://www.yale.edu/tp/cas")
private String serviceId;
// getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class SsoAttributes {
@XmlElement(name = "attribute", namespace = "http://www.yale.edu/tp/cas")
private List<Attribute> attributeList;
// getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Attribute {
@XmlAttribute(name = "name")
private String name;
@XmlAttribute(name = "type")
private String type;
@XmlAttribute(name = "value")
private String value;
// getters and setters
}
这些实体类使用了Java的JAXB注解,可以通过JAXBContext来将XML转换成Java对象。例如:
JAXBContext jaxbContext = JAXBContext.newInstance(ServiceResponse.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
ServiceResponse serviceResponse = (ServiceResponse) unmarshaller.unmarshal(xmlFile);
原文地址: https://www.cveoy.top/t/topic/jNkG 著作权归作者所有。请勿转载和采集!