проблема с загрузкой Java xml!

#java #xml #upload #ftp #network-programming

#java #xml #загрузка #ftp #сетевое программирование

Вопрос:

У меня возникла ситуация, которую мне нужно разрешить. Мне нужно загрузить определенные элементы xml-файла, чтобы загрузить его на сервер, мне удалось это сделать, и я создал демонстрационный метод, чтобы проверить, загружается ли файл на сервер или нет.

Мой XML-файл имеет структуру,

 <config>
 <engine>
    <eid>1</eid>
    <sometextelement>text</sometextelement>
 </engine>

 <engine>
    <eid>2</eid>
    <sometextelement>text</sometextelement>
 </engine>

 <engine>
    <eid>3</eid>
    <sometextelement>text</sometextelement>
 </engine>


</config>
  

Мой код сервлета:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("application/json");
        //response.setHeader("Cache-Control", "no-cache");
         PrintWriter out = response.getWriter();
         JSONObject obj = new JSONObject();
         String value = request.getParameter("value");
            String message = "";
            String update = "";
            Element element = null;
            Element root = null;

            XMLOutputter xmlOutputter = new XMLOutputter();
        try{
        doc = saxBuilder.build("E:/workbench j2ee/cPEP_UI/WebContent/engine.xml");

        }catch(Exception e){
            e.printStackTrace();
        }
        root = doc.getRootElement();
        List list = doc.getRootElement().getChildren();
        Iterator itr = list.iterator();
        int i = 0;
        while(itr.hasNext()){
             element = (Element)itr.next();
            System.out.println("Entered 1");
          File f = File.createTempFile("engine_",".xml");
           System.out.println(f);
            xmlOutputter.output(element, new FileWriter(f));

            i  = 1;


            putFile(f,i);



        }




         // xmlOutputter.output(doc, new FileWriter("E:/workbench j2ee/cPEP_UI/WebContent/engine.xml"));





        // System.out.println("hello from system");
        // out.println("hello");



    }

    public void putFile(File f, int i) throws SocketException, IOException{
        FTPClient client = new FTPClient();
        FileInputStream fis = null;

        client.connect("ftp.someserver.co.uk",21);
        boolean login = client.login("webmaster@someserver.co.uk",
                "mypassword");



        fis = new FileInputStream(f);
        if(client.storeFile("engine_" i ".xml", fis)){
            System.out.println("yes");
        }else{
            System.out.println("no");

        }
        client.logout();
        fis.close();
    }
  

Но проблема в том, что файл загружается должным образом, но содержимое неполное, я хочу сказать, что оно <engine> есть, но </engine> его там нет. Но я перепроверил это в своей локальной системе, которая создает временный файл, и он показывает полный XML-файл. Почему весь контент не загружается на сервер!?
есть идеи?
Это то, что я вижу на сервере,

 <engine>
    <eid>1</eid>
    <sometextelement
  

Ответ №1:

Если вы написали клиентский код самостоятельно, похоже, что поток на стороне клиента сброшен неправильно.

Попробуйте очистить или закрыть ( close() также удаляет поток) поток клиента.

Комментарии:

1. Я не достал тебе Вивьен! не существует метода fis. flush().

2. как это сделать?! Пожалуйста, помогите мне с этим!

3. На стороне клиента, когда вы загружаете файл. Что вы используете? Вероятно, какой-то OutputStream с flush() методом.

4. Я использую метод PutFile(), код которого уже есть в вопросе. но метод flush не связан ни с одним потоком, который я использую.

5. В данном случае это может быть тот, new FileWriter(f) который вы используете для хранения вашего временного XML-файла.