SAXParser将Clob读作XML

时间:2015-04-02 05:40:41

标签: java xml spring saxparser clob

我正在使用Spring MVC和Hibernate的Web应用程序,

我在我的数据库(Oracle)上有这个结构数据,

structure data

CLOB数据的值是XML,我想解析它并读取/打印元素或将其用于其他任何内容, 我遵循了这个教程thinktibitsmkyong,但我遇到了困难,我甚至无法打印出我想要的xml元素,

这是我的CLOB数据的一部分,

<rawdata_out>
            <soapenv:Envelope xmlns:mhpc="http://service.bni.co.id/mhp-common" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bpjs="http://bpjs.com">
                <soapenv:Header/>
                <soapenv:Body>
                    <bpjs:bayarTagihan>
                        <bpjs:chId>BNI</bpjs:chId>
                        <bpjs:reqId>TLR00471344</bpjs:reqId>
                        <bpjs:kodeBank>020</bpjs:kodeBank>
                        <bpjs:username>bni001</bpjs:username>
                        <bpjs:password>bni#jms2014</bpjs:password>
                        <bpjs:noTagihan>140721438362</bpjs:noTagihan>
                        <bpjs:kodeRefBank>JHT447487#JKK447487#JKM447487</bpjs:kodeRefBank>
                        <bpjs:tglTrx>12-08-2014 15:08:55</bpjs:tglTrx>
                        <bpjs:avl/>
                    </bpjs:bayarTagihan>
                </soapenv:Body>
            </soapenv:Envelope>
        </rawdata_out>

这是我的代码,

@RequestMapping(value="/admin/Detail-BPJS-TK.html")
public ModelAndView listDetailBPJSTK(ModelMap model, HttpServletRequest request, HttpServletResponse response)throws ParserConfigurationException, SAXException, Exception{
if(!((request.getParameter("MESSAGEID")) == null)){
    String MESSAGEID = request.getParameter("MESSAGEID");
    System.out.println(MESSAGEID);
    //140721438362
    //DetailBPJS detailbpjs = detailbpjsService.get(MESSAGEID);

    //String tes = detailbpjs.getMESSAGEID();
    //System.out.println(tes);

    Configuration cfg = new Configuration();
    cfg.configure("hibernatesoaappbpjstk.cfg.xml");

    SessionFactory factory = cfg.buildSessionFactory();
    Session session = factory.openSession();

    String pay = "PAYMENT";
    String sub = "PROCESSED";

    Query query = session.createQuery("from DetailBPJS where TRANSACTION = :tra and SUBTRANSACTION = :sub and MESSAGEID = :mes");
    query.setParameter("tra", pay);
    query.setParameter("sub", sub);
    query.setParameter("mes", MESSAGEID);

    @SuppressWarnings("unchecked")
    List <DetailBPJS> result = query.list();

    if(result.isEmpty()){
        System.out.println("Please, check the 'No. Billing' again!!");
        System.out.println(MESSAGEID);
        model.addAttribute("errorMessageBPJSTK", "true");
    }else{
        DetailBPJS data = (DetailBPJS)result.get(0);
        String nom1 = data.getTRANSACTION();
        String nom2 = data.getSUBTRANSACTION();
        String nom3 = data.getUUID();
        Clob nom4 = data.getRAWDATA();

        System.out.println(nom1 + " - " + nom2 + " - " + nom3 + " - " + nom4);
        //140721438362

        //convert clob to java.io.reader
        Reader myclob = nom4.getCharacterStream();

        //create InputSource from Reader
        InputSource myinput = new InputSource(myclob);

        try {

            SAXParserFactory factoryz = SAXParserFactory.newInstance();
            SAXParser saxParser = factoryz.newSAXParser();

            DefaultHandler handler = new DefaultHandler(){
                boolean b_krb   = false;
                boolean b_reqid = false;
                boolean b_ch    = false;
                boolean b_kb    = false;
                boolean b_tgl   = false;
                boolean tot     = false;
                boolean jht     = false;
                boolean jkk     = false;
                boolean jkm     = false;

                @SuppressWarnings("unused")
                public void startElements(String uri, String localName, String qName, Attributes attributes) throws SAXException{
                    if (qName.equalsIgnoreCase("bpjs:kodeRefBank")){
                        b_krb = true;
                        System.out.println("yup");
                    }
                    if (qName.equalsIgnoreCase("bpjs:reqId")){
                        b_reqid = true;
                    }
                    if (qName.equalsIgnoreCase("bpjs:chId")){
                        b_ch = true;
                    }
                    if (qName.equalsIgnoreCase("bpjs:kodeBank")){
                        b_kb = true;
                    }
                    if (qName.equalsIgnoreCase("bpjs:tglTrx")){
                        b_tgl = true;
                    }
                    if (qName.equalsIgnoreCase("totalAmount")){
                        tot = true;
                    }
                    if (qName.equalsIgnoreCase("amountJHT")){
                        jht = true;
                    }
                    if (qName.equalsIgnoreCase("amountJKK")){
                        jkk = true;
                    }
                    if (qName.equalsIgnoreCase("amountJKM")){
                        jkm = true;
                    }
                }

                @SuppressWarnings("unused")
                public void character(char ch[], int start, int length) throws SAXException{
                    if (b_krb){
                        System.out.println("(1) Value Of KodeRefBank : " + new String(ch, start, length));
                        b_krb = false;
                    }
                    if (b_reqid){
                        System.out.println("(2) Value Of ReqId : " + new String(ch, start, length));
                        b_reqid = false;
                    }
                    if (b_ch){
                        System.out.println("(3) Value Of ChId : " + new String(ch, start, length));
                        b_ch = false;
                    }
                    if (b_kb){
                        System.out.println("(4) Value Of KodeBank : " + new String(ch, start, length));
                        b_kb = false;
                    }
                    if (b_tgl){
                        System.out.println("(5) Value Of TglTrx : " + new String(ch, start, length));
                        b_tgl = false;
                    }
                    if (tot){
                        System.out.println("(6) Value Of Tot : " + new String(ch, start, length));
                        tot = false;
                    }
                    if (jht){
                        System.out.println("(7) Value Of JHT : " + new String(ch, start, length));
                        jht = false;
                    }
                    if (jkk){
                        System.out.println("(8) Value Of JKK : " + new String(ch, start, length));
                        jkk = false;
                    }
                    if (jkm){
                        System.out.println("(9) Value Of JKM : " + new String(ch, start, length));
                        jkm = false;
                    }
                }
            };
            saxParser.parse(myinput, handler);

        } catch (Exception e) {
            e.printStackTrace();

            // TODO: handle exception
        }

        //SAX Parser to parse this xml

    }
    session.close();
    factory.close();
}else{
    System.out.println("Please, check the 'No. Billing' again!!");
    String MESSAGEID = request.getParameter("MESSAGEID");
    System.out.println(MESSAGEID);
    model.addAttribute("errorMessageBPJSTK", "true");
}

return listDetailBPJS(model);
}

任何帮助都会很愉快:)

0 个答案:

没有答案