文档章节

JAXB的应用

别寒
 别寒
发布于 2016/04/18 10:42
字数 1229
阅读 50
收藏 3


        主要是注意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集合之外,注解的关键字必须要正确,否则取不到内容。


© 著作权归作者所有

共有 人打赏支持
别寒
粉丝 30
博文 271
码字总数 137605
作品 0
永州
程序员
jaxb替换smooks项目方案建议书

1 前言 本文档是描述Smooks的应用情况,以及使用Jaxb替换smooks的可行性分析及实施方案,有不足之处还望谅解和指出。 2 背景 项目系统中使用Smooks出现几次死锁问题导致系统宕机,其后针对S...

WinnieChan
2013/08/02
0
0
JAXB 应用指南

文章转自:http://blog.csdn.net/darxin/article/details/4845820 JAXB(Java Architecture for XML Binding)是一种特殊的序列化/反序列化工具。它可以使XML数据以Java Objects的形式直接应...

红薯
2011/08/06
4.4K
0
Java 中的 XML: 数据绑定,第 1 部分:代码生成方法 — JAXB 及其它

企业 Java 专家 Dennis Sosnoski 研究了几种 XML 数据绑定方法,这些方法根据用于 XML 文档的 W3C XML Schema 或 DTD 文法来生成代码。他从人们期待已久的 JAXB 标准(马上就要由 Java Commu...

JavaGG
2009/05/22
1K
0
使用 JAXB 框架定制 Web 服务行为

Web 服务概述 从本质上来讲 Web 服务就是对外暴露的并能够通过 Web 进行调用的一组 API,它并不要求服务提供方及调用方的技术实现、编程语言、运行平台甚至操作系统等。也正因为这个特点 We...

红薯
2010/03/24
1K
1
JAXB简单自定义适配器以及简单使用

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树...

吕兵阳
2016/04/03
201
0

没有更多内容

加载失败,请刷新页面

加载更多

redis-hash

哈希类型是指健值本身又是一个键值对结构 基本命令: hset key field value 设置值 hget(获取),hdel(删除),hlen(计算field个数),hmget(批量设置),hexists(是否存在),hkeys(获取所有的...

拐美人
19分钟前
1
0
简单的svm例子

数据来源:https://github.com/oumiga1314/Coursera-ML-AndrewNg-Notes/blob/master/code/ex6-SVM/data/ex6data1.mat import pandas as pd import numpy as np import scipy.io as sio impor......

南桥北木
23分钟前
0
0
android 关于View的一些整理

1、Button text的值为英文时,会自动转换成大写。如需取消,设置android:textAllCaps="false" 2、控件的可见性 可以在layout的配置文件中,配置android:visibility属性 调用setVisibility()...

西米小娅
33分钟前
0
0
Spring JDBC数据源分析

Spring数据源分析 分析这样一段代码: package com.jason.spring.datasource.jdbc;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframew......

宸明
41分钟前
1
0
FatJar:适用于sdk多module打包和合并多个jar的gradle插件

usage: 1.下载fatJar.gradle放置于project根目录 2.在project的build.gradle中添加依赖和配置: apply from: 'fatJar.gradle'buildscript { dependencies { classpath 'xyz......

SuShine
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部