SAXParser在JavaHibernate中解析CLOB中的XML数据

SAXParser在JavaHibernate中解析CLOB中的XML数据,java,xml,spring,hibernate,Java,Xml,Spring,Hibernate,我正在开发一个使用Spring MVC和Hibernate的web应用程序 我想从CLOB解析XML数据并打印它, 我一直在学习本教程,但从这一点上我就被卡住了, 我无法打印所需的xml元素 这是我的密码 @RequestMapping(value="/admin/Detail-BPJS-TK.html") public ModelAndView listDetailBPJSTK(ModelMap model, HttpServletRequest request, HttpServletRes

我正在开发一个使用Spring MVC和Hibernate的web应用程序

我想从CLOB解析XML数据并打印它, 我一直在学习本教程,但从这一点上我就被卡住了, 我无法打印所需的xml元素

这是我的密码

@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);
}

哪里出了问题?@Owenbringo我不知道,它只是没有打印出我想要的Clobha元素。你试过追踪它吗?在解析CLOB之前,尝试将其打印为字符串以检查其内容如何。@Owenbringo我已经调试过它,当我尝试打印CLOB时,它会成功打印,并且在解析CLOB后打印字符串已被跳过~