JAXB的应用
博客专区 > 别寒 的博客 > 博客详情
JAXB的应用
别寒 发表于2年前
JAXB的应用
  • 发表于 2年前
  • 阅读 44
  • 收藏 3
  • 点赞 1
  • 评论 0

移动开发云端新模式探索实践 >>>   


        主要是注意JAXB的注解的使用@XmlRootElement(根节点)、@XmlElement(子节点)、@XmlAttribute(节点属性)

如解析如下xml文档:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<insuredInfo>
       <insuredName>hehongbo</insuredName>
       <insuredIdentifyType>1</insuredIdentifyType>
       <insuredIdentifyNumber>430611198307215013</insuredIdentifyNumber>
       <insuredMobile>13243764322</insuredMobile>
       <insuredEmail>6745454@qq.com</insuredEmail>
</insuredInfo>

需要转换的java对象:

package com.cheyooh.service.dal.db.dto.api.dadi;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
  
@XmlRootElement(name = "insuredInfo")  
public class InsuredInfo {
	
	private String insuredName;  
	private String insuredIdentifyType;  
	private String insuredIdentifyNumber;  
	private String insuredMobile;  
	private String insuredEmail;
	
	@XmlElement(name = "insuredName")
	public String getInsuredName() {
		return insuredName;
	}
	public void setInsuredName(String insuredName) {
		this.insuredName = insuredName;
	}
	
	@XmlElement(name = "insuredIdentifyType")
	public String getInsuredIdentifyType() {
		return insuredIdentifyType;
	}
	public void setInsuredIdentifyType(String insuredIdentifyType) {
		this.insuredIdentifyType = insuredIdentifyType;
	}
	
	@XmlElement(name = "insuredIdentifyNumber")
	public String getInsuredIdentifyNumber() {
		return insuredIdentifyNumber;
	}
	public void setInsuredIdentifyNumber(String insuredIdentifyNumber) {
		this.insuredIdentifyNumber = insuredIdentifyNumber;
	}
	
	@XmlElement(name = "insuredMobile")
	public String getInsuredMobile() {
		return insuredMobile;
	}
	public void setInsuredMobile(String insuredMobile) {
		this.insuredMobile = insuredMobile;
	}
	
	@XmlElement(name = "insuredEmail")
	public String getInsuredEmail() {
		return insuredEmail;
	}
	public void setInsuredEmail(String insuredEmail) {
		this.insuredEmail = insuredEmail;
	}  
  
}


如果再一个xml文档子节点下还有一个子节点,如何映射呢?

对于这个问题,需要再java对象中什么的时候,子节点属性不能只是简单的java对象,而是要声明为List对象,如:private List<Request> request;

xml:

<?xml version="1.0" encoding="GBK"?>
<message finishTime=”2011-12-25 12:00:00”>
<!--from里为sellerId,需要与GET请求里所传参数保持一致 -->
<request  func=" car_info_sync" return=”true” from=”*****”>
<content>
   <orderInfo>
<name>用户名称</name>
<mobile>手机号码</mobile>
    <email>电子邮件地址</email>
    <carLicence>车牌号</carLicence>
    <!—车辆行驶城市代码 六位 -->
    <cityCode>xxxxxx</cityCode>
    <!—车辆登记日期,到日或者到月 -->
    <registerDate>YYYY-MM-DD 或者 YYYY-MM</registerDate>
    <!—商业险生效日期 -->
    <bizBeginDate>YYYY-MM-DD</bizBeginDate>
    <!—交强险生效日期 -->
    <forBeginDate>YYYY-MM-DD</forBeginDate>
    <utmsn>123456</utmsn>
  </orderInfo>
</content>
</request>
</message>

java对象:

package com.cheyooh.service.dal.db.dto.api.dadi;

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
  
@XmlRootElement(name = "message")  
public class Message {  
	
	private String finishTime;  
	private List<Request> request;
	
	@XmlAttribute(name = "finishTime")  
	public String getFinishTime() {
		return finishTime;
	}
	public void setFinishTime(String finishTime) {
		this.finishTime = finishTime;
	}
	
	@XmlElement(name = "request")  
	public List<Request> getRequest() {
		return request;
	}
	public void setRequest(List<Request> request) {
		this.request = request;
	}
	
	
	@Override
	public String toString() {
		return "Message [finishTime=" + finishTime + ", request=" + request
				+ "]";
	}
	
}

这里可以看到,message节点中的request子节点映射为list集合,但是get方法中是注解仍然是@XmlElement。

request对象的声明:

package com.cheyooh.service.dal.db.dto.api.dadi;

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
  
@XmlRootElement(name = "request")  
public class Request {  
	
	private String func;
	private String returnAttribute;
	private String from;
	private List<Content> content;
	
	@XmlAttribute(name = "func")
	public String getFunc() {
		return func;
	}
	public void setFunc(String func) {
		this.func = func;
	}
	
	@XmlElement(name = "content")  
	public List<Content> getContent() {
		return content;
	}
	public void setContent(List<Content> content) {
		this.content = content;
	}
	
	@XmlAttribute(name = "return")
	public String getReturnAttribute() {
		return returnAttribute;
	}
	public void setReturnAttribute(String returnAttribute) {
		this.returnAttribute = returnAttribute;
	}
	
	@XmlAttribute(name = "from")
	public String getFrom() {
		return from;
	}
	public void setFrom(String from) {
		this.from = from;
	}
	
}

request节点中的content子节点对象:

package com.cheyooh.service.dal.db.dto.api.dadi;

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
  
@XmlRootElement(name = "content")  
public class Content {  
	
	private List<OrderInfo> orderInfo;
	
	@XmlElement(name = "orderInfo")
	public List<OrderInfo> getOrderInfo() {
		return orderInfo;
	}

	public void setOrderInfo(List<OrderInfo> orderInfo) {
		this.orderInfo = orderInfo;
	}  
		
  
}

最后是orderInfo节点的对象映射:

package com.cheyooh.service.dal.db.dto.api.dadi;

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
  
@XmlRootElement(name = "orderInfo")  
public class OrderInfo {  
	
	private String chanceCreateTime;  //商机进入时间
	private String startDate;  	//起保日期
	private String insuranceApplicantNo;	//投保单号  
	private Double premium;  	//总保费
	private String insuranceType;  //投保单类型
	private String utmsn;  //合作方订单号
	private String paymentNo;  //支付申请号
	private String paymentTime;	//支付申请时间
	private String policyNo;	//保单号
	private String effectdate;	//保单生效时间
	
	private List<Commercial> commercial;  //商业险信息
	
	private List<Compulsory> compulsory;  //交强险信息
	
	private List<VehicleInfo> vehicleInfo;  //车辆信息
	
	
	private List<ApplicantInfo> applicantInfo;	//投保人信息
	private List<InsuredInfo> insuredInfo;	//被保人信息
	private List<DistributionInfo> distributionInfo;	//配送信息
	
	private String name;// 姓名
	private String mobile;// 手机号
	private String email;// 邮箱
	private String carLicence;// 车牌号
	private String cityCode;
	private String registerDate;
	private String bizBeginDate;
	private String forBeginDate;
	
	@XmlElement(name = "name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@XmlElement(name = "mobile")
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	@XmlElement(name = "email")
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	@XmlElement(name = "carLicence")
	public String getCarLicence() {
		return carLicence;
	}
	public void setCarLicence(String carLicence) {
		this.carLicence = carLicence;
	}
	@XmlElement(name = "cityCode")
	public String getCityCode() {
		return cityCode;
	}
	public void setCityCode(String cityCode) {
		this.cityCode = cityCode;
	}
	@XmlElement(name = "registerDate")
	public String getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(String registerDate) {
		this.registerDate = registerDate;
	}
	@XmlElement(name = "bizBeginDate")
	public String getBizBeginDate() {
		return bizBeginDate;
	}
	public void setBizBeginDate(String bizBeginDate) {
		this.bizBeginDate = bizBeginDate;
	}
	@XmlElement(name = "forBeginDate")
	public String getForBeginDate() {
		return forBeginDate;
	}
	public void setForBeginDate(String forBeginDate) {
		this.forBeginDate = forBeginDate;
	}
	
	@XmlElement(name = "applicantInfo")
	public List<ApplicantInfo> getApplicantInfo() {
		return applicantInfo;
	}
	public void setApplicantInfo(List<ApplicantInfo> applicantInfo) {
		this.applicantInfo = applicantInfo;
	}
	
	@XmlElement(name = "insuredInfo")
	public List<InsuredInfo> getInsuredInfo() {
		return insuredInfo;
	}
	public void setInsuredInfo(List<InsuredInfo> insuredInfo) {
		this.insuredInfo = insuredInfo;
	}
	
	@XmlElement(name = "distributionInfo")
	public List<DistributionInfo> getDistributionInfo() {
		return distributionInfo;
	}
	public void setDistributionInfo(List<DistributionInfo> distributionInfo) {
		this.distributionInfo = distributionInfo;
	}
	
	@XmlElement(name = "chanceCreateTime")
	public String getChanceCreateTime() {
		return chanceCreateTime;
	}
	public void setChanceCreateTime(String chanceCreateTime) {
		this.chanceCreateTime = chanceCreateTime;
	}
	
	@XmlElement(name = "startDate")
	public String getStartDate() {
		return startDate;
	}
	public void setStartDate(String startDate) {
		this.startDate = startDate;
	}
	
	@XmlElement(name = "insuranceApplicantNo")
	public String getInsuranceApplicantNo() {
		return insuranceApplicantNo;
	}
	public void setInsuranceApplicantNo(String insuranceApplicantNo) {
		this.insuranceApplicantNo = insuranceApplicantNo;
	}
	
	@XmlElement(name = "premium")
	public Double getPremium() {
		return premium;
	}
	public void setPremium(Double premium) {
		this.premium = premium;
	}
	
	@XmlElement(name = "insuranceType")
	public String getInsuranceType() {
		return insuranceType;
	}
	public void setInsuranceType(String insuranceType) {
		this.insuranceType = insuranceType;
	}
	
	@XmlElement(name = "utmsn")
	public String getUtmsn() {
		return utmsn;
	}
	public void setUtmsn(String utmsn) {
		this.utmsn = utmsn;
	}
	
	@XmlElement(name = "commercial")
	public List<Commercial> getCommercial() {
		return commercial;
	}
	public void setCommercial(List<Commercial> commercial) {
		this.commercial = commercial;
	}
	
	@XmlElement(name = "compulsory")
	public List<Compulsory> getCompulsory() {
		return compulsory;
	}
	public void setCompulsory(List<Compulsory> compulsory) {
		this.compulsory = compulsory;
	}
	
	@XmlElement(name = "vehicleInfo")
	public List<VehicleInfo> getVehicleInfo() {
		return vehicleInfo;
	}
	public void setVehicleInfo(List<VehicleInfo> vehicleInfo) {
		this.vehicleInfo = vehicleInfo;
	}
	
	@XmlElement(name = "paymentNo")
	public String getPaymentNo() {
		return paymentNo;
	}
	public void setPaymentNo(String paymentNo) {
		this.paymentNo = paymentNo;
	}
	
	@XmlElement(name = "paymentTime")
	public String getPaymentTime() {
		return paymentTime;
	}
	public void setPaymentTime(String paymentTime) {
		this.paymentTime = paymentTime;
	}
	
	@XmlElement(name = "policyNo")
	public String getPolicyNo() {
		return policyNo;
	}
	public void setPolicyNo(String policyNo) {
		this.policyNo = policyNo;
	}
	
	@XmlElement(name = "effectdate")
	public String getEffectdate() {
		return effectdate;
	}
	public void setEffectdate(String effectdate) {
		this.effectdate = effectdate;
	}  
	
	
}

至此,JAXB就完成了对复杂XML文档的映射解析,除了需要注意子节点集合映射为list集合之外,注解的关键字必须要正确,否则取不到内容。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 28
博文 262
码字总数 132175
×
别寒
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: