xml转为java_JAXBContext

基本语法

@XmlRootElement

xml的根节点

@XmlAccessorType(XmlAccessType.FIELD)

在一个类的上面使用表明这个类的字段都是xml节点 前提是字段的名称要与 xml的节点的名称要一致 如果不一致 要使用@XmlElement(name=“name”)

@XmlAttribute(name=“name”)

xml节点属性的名称详看下方例子

@XmlElementWrapper(name=“list”)

详见下方的例子中使用

例子一

StringBuilder xml = new StringBuilder();
        xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        xml.append("<boys>");
        xml.append("    <boy id=\"1\">");
        xml.append("        <name>Paul</name>");
        xml.append("    </boy>");
        xml.append("    <boy id=\"2\">");
        xml.append("        <name>Jack</name>");
        xml.append("    </boy>");
        xml.append("</boys>");
        JAXBContext context = JAXBContext.newInstance(Boys.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        StringReader reader = new StringReader(xml.toString());
        Object obj = unmarshaller.unmarshal(reader);
        Boys boys = (Boys) obj;
        System.out.println(String.format("boys_size=%s", boys.getBoy().size()));
        boys.getBoy().stream().forEach(item->{
            System.out.println(String.format("the boy id=%s name=%s",item.getId(),item.getName()));
        });

Boys.java

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.HashSet;
import java.util.Set;
@XmlRootElement(name = "boys")
@XmlAccessorType(XmlAccessType.FIELD)
public class Boys {
    private Set<Boy> boy = new HashSet<>();
    //也可以使用List做集合
    //private List<Boy> boy = new ArrayList<Boy>();
    //set and  get method
    public Set<Boy> getBoy() {
        return boy;
    }
    public void setBoy(Set<Boy> boy) {
        this.boy = boy;
    }
}

Boy.java

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@XmlAccessorType(XmlAccessType.FIELD)//就不用在每一个字段上都标注@XmlElement(name = "xxx")
public class Boy {
    @XmlAttribute(name = "id")
    private String id;
    private String name;
    //set and get method
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}

例子二

在这里插入图片描述
把要转化成Model类传入进newInstance()里

package com.qbsea.xmlconvertor;
 
import com.qbsea.xmlconvertor.model.CmCore;
 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
 
public class XmlConvertor {
	public static JAXBContext context;
	public static Unmarshaller unmarshaller;
	static {
		try {
			context = JAXBContext.newInstance(CmCore.class);
			unmarshaller = context.createUnmarshaller();
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
 
	public static <T> T getEntity(String xmlStr,Class<T> resultClass) {
		StringReader reader = new StringReader(xmlStr);
		try {
		
			Object obj = unmarshaller.unmarshal(reader);
			return (T)obj;
		} catch (JAXBException ex) {
			ex.printStackTrace();
			return null;
		}
	}
}

调用入口
在这里插入图片描述
参考XML报文

<?xml version="1.0" encoding="UTF-8"?>
<CMCORE xmlns="http://www.cm-inv.com/CMINV/2015/10">
    <CMAPI0008Rs>
        <CommonRsHdr>
            <StatusCode>0000</StatusCode>
            <ServerStatusCode>Success</ServerStatusCode>
            <SPRsUID>7832</SPRsUID>
            <RqUID>b2ebd12a-136b-43wb-s3a1-d9114c481ac2</RqUID>
        </CommonRsHdr>
				<list>
	        <cardDef>
	            <bindingName>name1</bindingName>
	            <bindingCardNo>cardNo1</bindingCardNo>
	            <bindingBank>bank1</bindingBank>
	            <bindingStatus>status01</bindingStatus>
	            <custId>custId001</custId>
	            <bankCode>001</bankCode>
	            <reservePhone>15011111111</reservePhone>
	        </cardDef>
	        <cardDef>
	            <bindingName>name2</bindingName>
	            <bindingCardNo>cardNo2</bindingCardNo>
	            <bindingBank>bank2</bindingBank>
	            <bindingStatus>status02</bindingStatus>
	            <custId>custId002</custId>
	            <bankCode>002</bankCode>
	            <reservePhone>15011111112</reservePhone>
	        </cardDef>
        </list>
    </CMAPI0008Rs>
</CMCORE>

xml 对应的实体类
package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.cm-inv.com/CMINV/2015/10", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.qbsea.xmlconvertor.model;

CmCore.java

package com.qbsea.xmlconvertor.model;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
@XmlRootElement(name = "CMCORE")
public class CmCore implements Serializable {
	private Cmapi0008rs cmapi0008rs;//绑卡查询结果
	@XmlElement(name = "CMAPI0008Rs")
	public Cmapi0008rs getCmapi0008rs() {
		return cmapi0008rs;
	}
	public void setCmapi0008rs(Cmapi0008rs cmapi0008rs) {
		this.cmapi0008rs = cmapi0008rs;
	}
}

CommonRsHdr.java

package com.qbsea.xmlconvertor.model;
import javax.xml.bind.annotation.XmlElement;
import java.io.Serializable;
public class CommonRsHdr implements Serializable{
	private String statusCode;
	private String serverStatusCode;
	private String sPRsUID;
	private String rqUID;
	//set and get method
	@XmlElement(name = "StatusCode")  
	public String getStatusCode() {
		return statusCode;
	}
	public void setStatusCode(String statusCode) {
		this.statusCode = statusCode;
	}
	@XmlElement(name = "ServerStatusCode")  
	public String getServerStatusCode() {
		return serverStatusCode;
	}
	public void setServerStatusCode(String serverStatusCode) {
		this.serverStatusCode = serverStatusCode;
	}
	@XmlElement(name = "SPRsUID")  
	public String getsPRsUID() {
		return sPRsUID;
	}
	public void setsPRsUID(String sPRsUID) {
		this.sPRsUID = sPRsUID;
	}
	@XmlElement(name = "RqUID")  
	public String getRqUID() {
		return rqUID;
	}
	public void setRqUID(String rqUID) {
		this.rqUID = rqUID;
	}
}

Cmapi0008rs.java

package com.qbsea.xmlconvertor.model;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import java.io.Serializable;
import java.util.List;
public class Cmapi0008rs implements Serializable {
	private CommonRsHdr commonRsHdr;
	private List<CardDef> cardDefList;
	@XmlElement(name = "CommonRsHdr")
	public CommonRsHdr getCommonRsHdr() {
		return commonRsHdr;
	}
	public void setCommonRsHdr(CommonRsHdr commonRsHdr) {
		this.commonRsHdr = commonRsHdr;
	}
	@XmlElementWrapper(name="list")
	@XmlElement(name="cardDef")
	public List<CardDef> getCardDefList() {
		return cardDefList;
	}
	public void setCardDefList(List<CardDef> cardDefList) {
		this.cardDefList = cardDefList;
	}
}

CardDef.java

package com.qbsea.xmlconvertor.model;
import javax.xml.bind.annotation.XmlElement;
import java.io.Serializable;
public class CardDef implements Serializable{
	private String bindingName;
	private String bindingCardNo;
	private String bindingBank ;
	private String bindingStatus ;
	private String custId ;
	private String bankCode ;
	private String reservePhone ;
	private String cityCode ;
	private String cityName ;
	private String provCode ;
	private String provName;
	private String mainFlag;
	private String binddingtime;
	//set and get method
	@XmlElement(name = "bindingName")   
	public String getBindingName() {
		return bindingName;
	}
	public void setBindingName(String bindingName) {
		this.bindingName = bindingName;
	}
	@XmlElement(name = "bindingCardNo")   
	public String getBindingCardNo() {
		return bindingCardNo;
	}
	public void setBindingCardNo(String bindingCardNo) {
		this.bindingCardNo = bindingCardNo;
	}
	@XmlElement(name = "bindingBank")   
	public String getBindingBank() {
		return bindingBank;
	}
	public void setBindingBank(String bindingBank) {
		this.bindingBank = bindingBank;
	}
	@XmlElement(name = "bindingStatus")   
	public String getBindingStatus() {
		return bindingStatus;
	}
	public void setBindingStatus(String bindingStatus) {
		this.bindingStatus = bindingStatus;
	}
	@XmlElement(name = "custId")  
	public String getCustId() {
		return custId;
	}
	public void setCustId(String custId) {
		this.custId = custId;
	}
	@XmlElement(name = "bankCode")  
	public String getBankCode() {
		return bankCode;
	}
	public void setBankCode(String bankCode) {
		this.bankCode = bankCode;
	}
	@XmlElement(name = "reservePhone")  
	public String getReservePhone() {
		return reservePhone;
	}
	public void setReservePhone(String reservePhone) {
		this.reservePhone = reservePhone;
	}
	@XmlElement(name = "cityCode")  
	public String getCityCode() {
		return cityCode;
	}
	public void setCityCode(String cityCode) {
		this.cityCode = cityCode;
	}
	@XmlElement(name = "cityName")  
	public String getCityName() {
		return cityName;
	}
	public void setCityName(String cityName) {
		this.cityName = cityName;
	}
	@XmlElement(name = "provCode")  
	public String getProvCode() {
		return provCode;
	}
	public void setProvCode(String provCode) {
		this.provCode = provCode;
	}
	@XmlElement(name = "provName")  
	public String getProvName() {
		return provName;
	}
	public void setProvName(String provName) {
		this.provName = provName;
	}
	@XmlElement(name = "mainFlag")  
	public String getMainFlag() {
		return mainFlag;
	}
	public void setMainFlag(String mainFlag) {
		this.mainFlag = mainFlag;
	}
    @XmlElement(name = "binddingtime")  
    public String getBinddingtime() {
        return binddingtime;
    }
    public void setBinddingtime(String binddingtime) {
        this.binddingtime = binddingtime;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值