审查视图

src/java/com/airport/util/parse/IMFXMLMaker.java 5.2 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
package com.airport.util.parse;
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class IMFXMLMaker {
    private static final Logger logger = Logger.getLogger(IMFXMLMaker.class);
    private Document XmlDocument;
    private Element RootElement;
    private Element SndrElement;
    private Element RcvrElement;
    private Element SEQNElement;
    private Element TYPEElement;
    private Element STYPElement;
23
    private Element originalELEMENT;
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

    private String XmlStr;
    private String SNDR;
    private String RCVR;
    private String SEQN;
    private String TYPE;
    private String STYP;
    private String IMFContent;
    private String IMFXml;

    public String getXmlStr() {
        return XmlStr;
    }

    public void setXmlStr(String xmlStr) {
        XmlStr = xmlStr;
    }

    public String getSNDR() {
        return SNDR;
    }

    public void setSNDR(String SNDR) {
        this.SNDR = SNDR;
    }

    public String getRCVR() {
        return RCVR;
    }

    public void setRCVR(String RCVR) {
        this.RCVR = RCVR;
    }

    public String getSEQN() {
        return SEQN;
    }

    public void setSEQN(String SEQN) {
        this.SEQN = SEQN;
    }

    public String getTYPE() {
        return TYPE;
    }

    public void setTYPE(String TYPE) {
        this.TYPE = TYPE;
    }

    public String getSTYP() {
        return STYP;
    }

    public void setSTYP(String STYP) {
        this.STYP = STYP;
    }

    public String getIMFContent() {
        return IMFContent;
    }

    public void setIMFContent(String IMFContent) {
        this.IMFContent = IMFContent;
    }

    public String getIMFXml() {
        return IMFXml;
    }

    public void setIMFXml(String IMFXml) {
        this.IMFXml = IMFXml;
    }

    //初始化报文头部节点
    public IMFXMLMaker(String sndr,String seqn,String type,String styp){
        this.SNDR = sndr;
        this.SEQN = seqn;
        this.TYPE = type;
        this.STYP = styp;

        this.XmlDocument = new Document();

        //跟节点
        this.RootElement = new Element("MSG");
        this.XmlDocument.addContent(this.RootElement);

        //meta节点
        Element MetaElement = new Element("META");
        this.RootElement.addContent(0,MetaElement);
115 116 117 118
        //原始内容节点,储存最原始报文内容的节点
        this.originalELEMENT = new Element("original");
        this.RootElement.addContent(1,this.originalELEMENT);
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
        //meta下的子节点们
        SndrElement = new Element("SNDR");
        RcvrElement = new Element("RCVR");
        SEQNElement = new Element("SEQN");
        Element DDTMElement = new Element("DDTM");
        TYPEElement = new Element("TYPE");
        STYPElement = new Element("STYP");

        MetaElement.addContent(0,SndrElement);
        MetaElement.addContent(1,RcvrElement);
        MetaElement.addContent(2,SEQNElement);
        MetaElement.addContent(3,DDTMElement);
        MetaElement.addContent(4,TYPEElement);
        MetaElement.addContent(5,STYPElement);

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String dateString = simpleDateFormat.format(new Date());
        DDTMElement.setText(dateString);

        SndrElement.setText(this.SNDR);
        SEQNElement.setText(this.SEQN);
        TYPEElement.setText(this.TYPE);
        STYPElement.setText(this.STYP);

    }

    public  String finalXmlStr(){

        try{
            Document contentDocument = string2Doc(this.IMFContent);
149
            this.originalELEMENT.addContent(0,contentDocument.detachRootElement());
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

            String backXml = doc2String(this.XmlDocument);
            return backXml;
        }catch (Exception e){
            e.printStackTrace();
            return this.SEQN+"error";
        }

    }

    /**
     * 字符串转换为DOCUMENT
     *
     * @param xmlStr 字符串
     * @return doc JDOM的Document
     * @throws Exception
     */
    public static Document string2Doc(String xmlStr) throws Exception {
        java.io.Reader in = new StringReader(xmlStr);
        Document doc = (new SAXBuilder()).build(in);
        return doc;
    }

    /**
     * Document转换为字符串
     *
     * @param doc DOCUMENT对象
     * @return xmlStr 字符串
     * @throws Exception
     */
    public  String doc2String(Document doc) throws Exception {
        Format format = Format.getPrettyFormat();
        format.setEncoding("UTF-8");// 设置xml文件的字符为UTF-8,解决中文问题
        XMLOutputter xmlout = new XMLOutputter(format);
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        xmlout.output(doc, bo);
        return bo.toString();
    }

    /**
     * XML转换为Document
     *
     * @param xmlFilePath XML文件路径
     * @return doc Document对象
     * @throws Exception
     */
    public static Document xml2Doc(String xmlFilePath) throws Exception {
        File file = new File(xmlFilePath);
        return (new SAXBuilder()).build(file);
    }

    public  void main(String[] args) throws Exception{
        finalXmlStr();
    }
}