文档章节

JAXB的应用

别寒
 别寒
发布于 2016/04/18 10:42
字数 1229
阅读 47
收藏 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集合之外,注解的关键字必须要正确,否则取不到内容。


© 著作权归作者所有

共有 人打赏支持
别寒
粉丝 30
博文 269
码字总数 136219
作品 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
Apache CXF 整合 Map

在进行编码前有必要对一些基本的认识进行介绍,以便后面的讲解。 1、JAXB: JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这...

yaokangjun
2014/08/21
0
1
XML 和 java对象相互转换

下面使用的是JDK自带的类,没有引用任何第三方jar包。 Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 Java 内容对象树。 备注:marshal(序列化、排列、整理) Marshaller 类使客户端...

Galy_绿
2015/12/24
55
0
使用JAXB处理XML文档——先睹为快

JAXB以其方便的XML数据处理能力可能会引起你的兴趣。你可能还不了解JAXB是什么,想要知道它到底有 什么好处,如果这是你需要的,你才会再花时间去细细的研究它,或者你只需要使用最基本的功能...

晨曦之光
2012/03/09
0
0
使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

Representational state transfer(REST)在 2000 年由 Roy Fielding 在博士论文中提出。但是,在 Java™ 社区中,直到 2008 年 JSR 311(JAX-RS) 规范定稿后才将其标准化。第一个版本的参考实...

红薯
2009/12/24
6.8K
9
在Eclipse中使用Jersey和Tomcat构建RESTful WebService及其调用

在Eclipse中使用Jersey和Tomcat构建RESTful WebService及其调用 RESTful Web 服务简介 REST 在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一。 RE...

Carl_
2015/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式-工厂模式

工厂模式 解释 根据参数返回对应的实例使用该实例进行操作 BeanFactory Object obj = BeanFactory.getBean(String name);getBean方法中根据name参数进行处理在程序外部使用obj实例增加n...

郭里奥
2分钟前
0
0
python使用有序字典

python自带的collections包中有很多有用的数据结构可供使用,其中有个叫OrderedDict类,它可以在使用的时候记录元素插入顺序,在遍历使用的时候就可以按照原顺序遍历。 a = {"a":1,"b"...

芝麻糖人
27分钟前
0
0
RestTemplate HttpMessageConverter

RestTemplate 微信接口 text/plain HttpMessageConverter

微小宝
28分钟前
0
0
mysql视图/存储过程/函数/事件/触发器

--语法参考:https://dev.mysql.com/doc/ (当前用的是5.6) https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-manipulation.html --视图 CREATE VIEW test.v AS SELECT * FROM t;......

坦途abc
29分钟前
0
0
MySQL参数优化案例

环境介绍 硬件配置 cpu核心数 内存大小 磁盘空间 16核 256G 3T 软件环境 操作系统版本 mysql版本 表数目 单表行数 centos-7.4 mysql-5.7.22 128张表 2kw行 优化层级与指导思想 优化层级 MySQ...

小致dad
39分钟前
0
0
【HAVENT原创】NodeJS 短网址开发(调用第三方接口)

最近想弄个短网址的示例站点,在网上搜集了一些代码,都需要数据库支持,所以只能自己写个简单的不需要数据库支持的(PS:那就只能借调第三方的接口了)。 index.js 启动文件 'use strict';...

HAVENT
39分钟前
0
0
219. Contains Duplicate II - LeetCode

Question 219. Contains Duplicate II Solution 题目大意:数组中两个相同元素的坐标之差小于给定的k,返回true,否则返回false 思路:用一个map记录每个数的坐标,如果数相同,如果坐标差小...

yysue
48分钟前
0
0
Android 自动生成java bean

背景: 想搞一个自动生成java bean 的方案。 首先想到的是注解自动生成代码的方法。但是看了看注解相关的东西,发现对已有的类,增加方法,目前没有找到办法。 继续goole :发现了这里。 ht...

Carlyle_Lee
52分钟前
0
0
图片加载相关

本文记载有关于 图片懒加载、图片模糊加载等与图片加载相关的知识,后续会更新 图片懒加载 利用img标签src属性,在该图片快到达客户可视范围时,给img添加src属性(添加后,会发起请求下载图...

littleFaye
53分钟前
0
0
面试宝典-怎么实现分布式锁

1. 基于数据库表做乐观锁,用于分布式锁。 2. 使用memcached的add()方法,用于分布式锁。 3. 使用redis的setnx()、expire()方法,用于分布式锁。 设置过期时间防止死锁,但是如果在setnx和e...

suyain
59分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部