XML与JAVABean的相互转换

一、XML生成JAVABean

1. 将以下xml报文转为JavaBen实例:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 接口一个报文对应一张入库预约单信息 -->

<ROOT>

<CODE>入库预约单号1</CODE>

<RELATEDCODE>采购订单1</RELATEDCODE>

<STATUS>状态</STATUS>

<SUPPLIERCODE>供应商代码</SUPPLIERCODE>

<SUPPLIERNAME>供应商名称</SUPPLIERNAME>

<LOCATIONCODE>库存地点</LOCATIONCODE>

<REVIEWTIME>PAC评审时间</REVIEWTIME>

<TOLOCATION>入库仓库 </TOLOCATION>

<STORAGEDATE>计划入库 时间</STORAGEDATE>

<CREATEDNAME>创建人</CREATEDNAME>

<CREATETIME>创建时间</CREATETIME>

<UPDATENAME>修改人</UPDATENAME>

<UPDATETIME>修改时间</UPDATETIME>

<ITEM>

<LINENUMBER>行项目号</LINENUMBER>

<ITEMCODE>物料编码</ITEMCODE>

<ITEMNAME>物料名称</ITEMNAME>

<QUANTITY>数量</QUANTITY>

<UNIT>单位</UNIT>

<WEIGHT>重量(KG)</WEIGHT>

<VOLUME>体积(MM3)</VOLUME>

</ITEM>

<ITEM>

<LINENUMBER>行项目号</LINENUMBER>

<ITEMCODE>物料编码</ITEMCODE>

<ITEMNAME>物料名称</ITEMNAME>

<QUANTITY>数量</QUANTITY>

<UNIT>单位</UNIT>

<WEIGHT>重量(KG)</WEIGHT>

<VOLUME>体积(MM3)</VOLUME>

</ITEM>

</ROOT>

2.  如图可见,ROOT为根节点,相应的是子节点,子节点ITEM作为根节点还有子节点,相应的JAVABean实体类如下:

@XmlRootElement(name="ROOT")  

public class ROOT {

//入库预约单号

    private String CODE;

    //采购订单

    private String RELATEDCODE;

    //状态

    private String STATUS;

    //供应商代码

    private String SUPPLIERCODE;

    //供应商名称

    private String SUPPLIERNAME;

    //库存地点

    private String LOCATIONCODE;

    //PAC评审时间

    private String REVIEWTIME;

    //入库仓库编码

    private String TOLOCATION;

    //入库时间

    private String STORAGEDATE;

    //创建人

    private String CREATEDNAME;

    //创建日期

    private String CREATETIME;

    //最后修改人

    private String UPDATENAME;

    //最后修改日期

    private String UPDATETIME;

 

    private List<ITEM> ITEM;

 

public ROOT() {

super();

}

 

public ROOT(String cODE, String rELATEDCODE, String sTATUS, String sUPPLIERCODE, String sUPPLIERNAME,

String lOCATIONCODE, String rEVIEWTIME, String tOLOCATION, String sTORAGEDATE, String cREATEDNAME,

String cREATETIME, String uPDATENAME, String uPDATETIME, List<ITEM> iTEM) {

super();

CODE = cODE;

RELATEDCODE = rELATEDCODE;

STATUS = sTATUS;

SUPPLIERCODE = sUPPLIERCODE;

SUPPLIERNAME = sUPPLIERNAME;

LOCATIONCODE = lOCATIONCODE;

REVIEWTIME = rEVIEWTIME;

TOLOCATION = tOLOCATION;

STORAGEDATE = sTORAGEDATE;

CREATEDNAME = cREATEDNAME;

CREATETIME = cREATETIME;

UPDATENAME = uPDATENAME;

UPDATETIME = uPDATETIME;

ITEM = iTEM;

}

        Get...

        Set...

3. 在实体类上增加注解@XmlRootElement(name="ROOT")解析时根节点会根据属性去生成相应的子节点,然后ITEM是多行需要定义为List,然后再定义单独的实体类Bean。如下

注意:实体类必须要有无参构造方法,不然在解析的时候会报错。

import javax.xml.bind.annotation.XmlRootElement;

 

@XmlRootElement  

public class ITEM {

 private String LINENUMBER;  

 private String ITEMCODE;

 private String ITEMNAME;

 private String QUANTITY;

 private String UNIT;

 private String WEIGHT;

 private String VOLUME;

 

 public ITEM() {

super();

 }

 

 public ITEM(String lINENUMBER, String iTEMCODE, String iTEMNAME, String qUANTITY, String uNIT, String wEIGHT,String vOLUME) {

super();

LINENUMBER = lINENUMBER;

ITEMCODE = iTEMCODE;

ITEMNAME = iTEMNAME;

QUANTITY = qUANTITY;

UNIT = uNIT;

WEIGHT = wEIGHT;

VOLUME = vOLUME;

 }

 

 

二、实体类转换为XML

ROOT root = new ROOT

(CODE,RELATEDCODE,STATUS,SUPPLIERCODE,SUPPLIERNAME,LOCATIONCODE,REVIEWTIME,TOLOCATION,STORAGEDATE,CREATEDNAME,CREATETIME,UPDATENAME,UPDATETIME, itemList);

//生成xml

         JAXBContext jc;

         StringWriter writer = new StringWriter();

         jc = JAXBContext.newInstance(ROOT.class);

          Marshaller ms = jc.createMarshaller();

         ms.marshal(root,System.out);  

         ms.marshal(root,writer);

         String xml = writer.getBuffer().toString();

 

三、dom4j解析xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- 说明:STATUS节点的值为:1或0,其中1表示接收成功,0表示接收失败 -->

<ROOT>

<STATUS>1</STATUS>

<MESSAGE></MESSAGE>

</ROOT>

解析:

            String result = port.warehousingOrder(xml);

            System.out.println("出参:"+result);

            //dom4j解析返回结果

            Document doc = DocumentHelper.parseText(result); // 将字符串转为XML

            Element rootElt = doc.getRootElement(); // 获取根节点

            Element element_status = rootElt.element("STATUS");

            String status = element_status.getStringValue();

            Element element_message = rootElt.element("MESSAGE");

            String message = element_message.getStringValue();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值