Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > HELP: не парсится xml


Автор: ADm 2.7.2008, 13:54
Привет All!
не получается распарсить xml-файл который загружается на сервер через web-форму.
для обработки загрузки файла использую пакет org.apache.commons.fileupload
Подскажите плз знающие, куда копать.

PS: парсер отдельно от сервлета работает (причем с тем же xml-файлом который я пытаюсь загрузить через форму).

выдается ошибка:
Код

02.07.2008 15:32:13 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet RecepientsImporter threw exception
org.xml.sax.SAXParseException: Premature end of file.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
        at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1037)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at my.package.rimporter.RecepientsImporterServlet.processRequest(RecepientsImporterServlet.java:60)
        at my.package.rimporter.RecepientsImporterServlet.doPost(RecepientsImporterServlet.java:99)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)


вот код метода processRequest сервлета:
Код

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=cp1251");

        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet RecepientsImporter</title>");  
            out.println("</head>");
            out.println("<body>");          

            if (ServletFileUpload.isMultipartContent(request)) {
                Object description_attr = request.getAttribute("description");
                String description = null;
                if (description_attr != null)
                    description = description_attr.toString();
                RecipientsXMLParser parser = new RecipientsXMLParser(description);
                
                ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
                
                FileItem uploadedFile = null;
                try {
                    uploadedFile = (FileItem) servletFileUpload.parseRequest(request).get(0);
                    XMLReader xr = XMLReaderFactory.createXMLReader();
                    xr.setContentHandler(parser);
                    xr.setErrorHandler(parser);
                    InputStream in = uploadedFile.getInputStream();
                    InputSource source = new InputSource(in);
                    source.setEncoding("Windows-1251");
                    xr.parse(source);
                } catch (SAXException xml_e) {
                    throw new ServletException(xml_e);
                } catch (FileUploadException ex) {
                    throw new IOException(ex);
                }
                    
                
                //uploadedFile.getInputStream();
                out.println("<h1>" + uploadedFile.getName() + "</h1>");
                         
            } else {// сервлету переданна неправильная форма
                throw new ServletException("Form must be multipart!");
            }

            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    } 


Автор: LSD 2.7.2008, 13:57
Запиши в лог, что именно приходит в запросе. Весь ли XML, не битый ли и .т.п.

Автор: ADm 2.7.2008, 14:51
Цитата

Запиши в лог, что именно приходит в запросе. Весь ли XML, не битый ли и .т.п.

нашел ошибку)
я получал загруженный файл такой строчкой:
uploadedFile = (FileItem) servletFileUpload.parseRequest(request).get(0);
надо было вместо 0 использовать 1 (тк в форме уже есть одно поле)...

спасибо за ответ).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)