![](/img/trans.png)
[英]How to unmarshal XML with multiple namespaces in different xml or ignore namespace in jaxb
[英]how to unmarshal this xml with multiple namespace
我定義了兩個類來解組xml,但是我得到的結果始終為null。
@XmlRootElement(name="ValidateApiUserResponse", namespace="http://ops.net/AdminAPI_Admin")
公共類ValidateApiUserResult擴展了OrionResponse {
/**
*
*/
private static final long serialVersionUID = 1L;
private ValidateApiUserResponse validateApiUserResult;
@XmlElement(name = "ValidateApiUserResult", namespace = DataStructuresNS.VanguardAdminNS)
public ValidateApiUserResponse getValidateApiUserResult() {
return validateApiUserResult;
}
public void setValidateApiUserResult(ValidateApiUserResponse validateApiUserResult) {
this.validateApiUserResult = validateApiUserResult;
}
}
公共類ValidateApiUserResponse實現java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String[] claims;
private Boolean isValid;
private int[] validServerIds;
public ValidateApiUserResponse() {
}
public ValidateApiUserResponse(String[] claims, Boolean isValid, int[] validServerIds) {
this.claims = claims;
this.isValid = isValid;
this.validServerIds = validServerIds;
}
@XmlElement(name = "Claims", namespace = DataStructuresNS.VanguardAdminNS)
public String[] getClaims() {
return claims;
}
public void setClaims(String[] claims) {
this.claims = claims;
}
@XmlElement(name = "IsValid", namespace = DataStructuresNS.VanguardAdminNS)
public Boolean getIsValid() {
return isValid;
}
public void setIsValid(Boolean isValid) {
this.isValid = isValid;
}
@XmlElement(name = "ValidServerIds", namespace = DataStructuresNS.VanguardAdminNS)
public int[] getValidServerIds() {
return validServerIds;
}
public void setValidServerIds(int[] validServerIds) {
this.validServerIds = validServerIds;
}
}
這是一個名稱空間
public class DataStructuresNS {
public static final String VanguardAdminNS = "http://schemas.datacontract.org/2004/07/Admin.DataStructures";
}
然后我嘗試解組
String abc = "<ValidateApiUserResponse xmlns=\"http://ops.net/AdminAPI_Admin\">\n" +
" <ValidateApiUserResult xmlns:a=\"http://schemas.datacontract.org/2004/07/Admin.DataStructures\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <a:Claims xmlns:b=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">\n" +
" <b:string>Admin</b:string>\n" +
" <b:string>MANAGER</b:string>\n" +
" </a:Claims>\n" +
" <a:IsValid>true</a:IsValid>\n" +
" <a:ValidServerIds xmlns:b=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">\n" +
" <b:int>5001</b:int>\n" +
" </a:ValidServerIds>\n" +
" </ValidateApiUserResult>\n" +
" </ValidateApiUserResponse>";
JAXBContext jaxbContext = JAXBContext.newInstance(ValidateApiUserResult.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
ValidateApiUserResult root = (ValidateApiUserResult)unmarshaller.unmarshal(new StringReader(abc));
我得到的根為空
為您的根類嘗試一下:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="ValidateApiUserResponse", namespace="http://ops.net/AdminAPI_Admin")
public class ValidateApiUserResult extends OrionResponse { ... }
我為數組定義新類,並在@XmlElement中添加type屬性。 例如:
private OrionString[] claims;
@XmlElement(name = "Claims", namespace = "xxxxx", type=OrionString.class)
public OrionString[] getClaims() {
return claims;
}
這是我定義的新類
public class OrionString {
private String[] oString;
@XmlElement(name = "string", namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")
public String[] getoString() {
return oString;
}
public void setoString(String[] oString) {
this.oString = oString;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.