问题:
javax.xml.bind.UnmarshalException: 意外的元素 (uri:"", local:"type")。
原因:
1、这种报错很有可能是最外面的那个类没有添加注解:@XmlRootElement
2、根节点的名称要和类相同
关于xml转类的注意点:
1、xml所有的节点开头字母要小写
2、'&' 字符要转义成 '&'
用javax里面的JAXB将xml转成bean限制有点多,特别是大小写的问题很麻烦,前两天写了个新的方法,用XStream解析很方便,附上用法:
这边有个实例xml:
<Package>
<Header>
<ResponseCode></ResponseCode>
<ErrorMessage></ErrorMessage>
</Header>
<Response>
<Policy>
<OrderId></OrderId>
<PolicyNo></PolicyNo>
<PolicyUrl></PolicyUrl >
<ProposalNo></ProposalNo>
<TotalPremium></TotalPremium>
<IsSuccess></IsSuccess>
<FailReason></FailReason>
<IssuedTime></IssuedTime>
</Policy>
</Response>
</Package>
首先我们创建好节点的类:
GLHeader、GLPackage、GLResponse、GLPolicy
public class GLHeader {
private String ResponseCode;
private String ErrorMessage;
public String getErrorMessage() {
return ErrorMessage;
}
public void setErrorMessage(String errorMessage) {
ErrorMessage = errorMessage;
}
public String getResponseCode() {
return ResponseCode;
}
public void setResponseCode(String responseCode) {
ResponseCode = responseCode;
}
}
public class GLPolicy {
private String OrderId;
private String PolicyNo;
private String PolicyUrl;
private String ProposalNo;
private String TotalPremium;
private String IsSuccess;
private String FailReason;
private String IssuedTime;
public String getOrderId() {
return OrderId;
}
public void setOrderId(String orderId) {
OrderId = orderId;
}
public String getPolicyNo() {
return PolicyNo;
}
public void setPolicyNo(String policyNo) {
PolicyNo = policyNo;
}
public String getPolicyUrl() {
return PolicyUrl;
}
public void setPolicyUrl(String policyUrl) {
PolicyUrl = policyUrl;
}
public String getProposalNo() {
return ProposalNo;
}
public void setProposalNo(String proposalNo) {
ProposalNo = proposalNo;
}
public String getTotalPremium() {
return TotalPremium;
}
public void setTotalPremium(String totalPremium) {
TotalPremium = totalPremium;
}
public String getIsSuccess() {
return IsSuccess;
}
public void setIsSuccess(String isSuccess) {
IsSuccess = isSuccess;
}
public String getFailReason() {
return FailReason;
}
public void setFailReason(String failReason) {
FailReason = failReason;
}
public String getIssuedTime() {
return IssuedTime;
}
public void setIssuedTime(String issuedTime) {
IssuedTime = issuedTime;
}
}
public class GLResponse {
private GLPolicy Policy;
public GLPolicy getPolicy() {
return Policy;
}
public void setPolicy(GLPolicy policy) {
this.Policy = policy;
}
}
public class GLPackage {
private GLHeader Header;
private GLResponse Response;
public GLPackage() {
super();
}
public GLPackage(GLHeader header, GLResponse response) {
super();
Header = header;
Response = response;
}
public GLHeader getHeader() {
return Header;
}
public void setHeader(GLHeader header) {
Header = header;
}
public GLResponse getResponse() {
return Response;
}
public void setResponse(GLResponse response) {
Response = response;
}
}
使用:
GLPackage packages = new GLPackage();
XStream xStream = new XStream();
xStream.alias("Header", GLHeader.class);
xStream.alias("Package", GLPackage.class);
xStream.alias("Response", GLResponse.class);
xStream.alias("Policy", GLPolicy.class);
packages = (GLPackage) xStream.fromXML(result);
XStream的有两个依赖包:
xpp3_min-1.1.4c.jar
xstream-1.3.1.jar
xstream-1.3.1.jar
下载地址:http://download.csdn.net/download/mia_zhu/9940123