Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / RAD 6.0 и fileupload / 13 сообщений из 13, страница 1 из 1
26.10.2007, 11:16:08
    #34896726
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Здравствуйте всем!

Нарыл в этом форуме инфу о том, как закачивать файл на сервер с помощью apache.commons.fileupload. Скачал commons-fileupload-1.2-bin.zip, достал из него JAR-файлы и подключил из локальной папки через свойства проекта как внешние библиотеки. Но fileupload не работает без пакета org.apache.commons.io.

Вопрос: Откуда взять org.apache.commons.io и как его подключить? Правильно ли я подключил fileupload JAR-файлы? Не будет ли проблем после переноса приложения на другой сервер, с Win на Linux, поскольку в подключении указан явный путь?


С уважением, Семен Попов
...
Рейтинг: 0 / 0
29.10.2007, 09:42:44
    #34900532
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Подключил в свойствах проекта jar-ы fileupload как внешние библиотеки. В результате сервер WebShere выдает ошибку:
Код: plaintext
1.
[29.10.07 9:31:11:562 MSK] 00000041 ServletWrappe E   SRVE0068E: Could not invoke the service() method on servlet ImportPensData. Exception thrown : java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
Правильно понимаю, что не хватает org/apache/commons/io/*? Где его взять и как подключить, чтобы после переноса приложения на другой сервер приложений это не было чревато последствиями?

Спасибо
...
Рейтинг: 0 / 0
29.10.2007, 09:49:04
    #34900549
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Нашел commons-io-1.3.2-bin.zip. Всем спасибо. Остался вопрос насчет подключения. Правильно ли я подключаю JAR к проекту - из произвольной локальной папки? Не будет ли потом завязки на этот путь, что потом может вылиться в проблему на другом сервере?
...
Рейтинг: 0 / 0
29.10.2007, 10:27:11
    #34900646
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Semen PopovНашел commons-io-1.3.2-bin.zip. Всем спасибо. Остался вопрос насчет подключения. Правильно ли я подключаю JAR к проекту - из произвольной локальной папки? Не будет ли потом завязки на этот путь, что потом может вылиться в проблему на другом сервере?

Используйте папку WEB-INF/lib своего web-приложения ( пример размещения файлов в web-приложении )
...
Рейтинг: 0 / 0
29.10.2007, 10:29:01
    #34900660
kest_ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Не важно где лежат jar на твоем компе, важно как они попадают в сервер приложений. Если при сборке приложения у тебя формируется war или ear, и в нем в нужных папках лежат нужные jar-ники, то все правильно, и от локальных путей ты не зависишь.
...
Рейтинг: 0 / 0
29.10.2007, 12:47:41
    #34901227
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
KachalovИспользуйте папку WEB-INF/lib своего web-приложения (пример размещения файлов в web-приложении)
Подключал как внешние или просто копировал по пути WEB-INF/lib, все равно возникает указанная выше ошибка.
kest_ruНе важно где лежат jar на твоем компе, важно как они попадают в сервер приложений. Если при сборке приложения у тебя формируется war или ear, и в нем в нужных папках лежат нужные jar-ники, то все правильно, и от локальных путей ты не зависишь.
Для проверки сделал экспорт приложения в EAR, который я потом инсталлирую на другом сервере. В полученном архиве нигде не нашел jar-ники commons.
...
Рейтинг: 0 / 0
29.10.2007, 16:34:33
    #34902273
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Semen PopovПодключал как внешние или просто копировал по пути WEB-INF/lib, все равно возникает указанная выше ошибка.
Поступил по-другому. Сделал импорт J2EE Utility Jars в проект. В этом случае jar-ы подключаются не как внешние библиотеки. После экспорта проекта в EAR вижу в корне архива эти jar-файлы. Внутри EAR также лежит мой WAR, но его WEB-INF/lib не содержит fileupload jar-ы.
Таким образом, получаем не ссылку на jar из явно указанного локального каталога, а ссылку на импортированный jar.
Но это не решило проблему с ошибкой, которую выдает сервер. Он по-прежнему не находит класс
org/apache/commons/io/output/DeferredFileOutputStream, хотя все jar-ы подключены.
...
Рейтинг: 0 / 0
30.10.2007, 09:51:03
    #34903624
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Добился все-таки того, чтобы jar-ы лежали в WEB-INF/lib. Теперь даже в файле .classpath указаны необходимые пути доступа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="JavaSource"/>
	<classpathentry kind="con" path="com.ibm.wtp.server.java.core.container/com.ibm.ws.ast.st.runtime.core.runtimeTarget.v60/WebSphere Application Server v6.0"/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6 JRE"/>
	<classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-fileupload-1.2.jar"/>
	<classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-io-1.3.2.jar"/>
	<classpathentry kind="output" path="WebContent/WEB-INF/classes"/>
</classpath>
Но никак не могу уйти от ошибки "java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream". В commons-io-1.3.2.jar посмотрел, там этот класс присутствует. А почему не находит, не понимаю.
...
Рейтинг: 0 / 0
31.10.2007, 09:37:28
    #34906393
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Вот какая штука интересная получается!
Код сервлета такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
...

 import  org.apache.commons.fileupload.FileItem;
 import  org.apache.commons.fileupload.FileItemFactory;
 import  org.apache.commons.fileupload.FileUploadException;
 import  org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import  org.apache.commons.fileupload.servlet.ServletFileUpload;
 import  org.apache.commons.io.output.DeferredFileOutputStream;

 public   class  ImportPensData  extends  HttpServlet  implements  Servlet {
    
     protected   void  doPost(HttpServletRequest req, HttpServletResponse resp)  throws  ServletException, IOException {
        //		 Check that we have a file upload request
		 boolean  isMultipart = ServletFileUpload.isMultipartContent(req);
//		 Create a factory for disk-based file items
		
		FileItemFactory factory =  new  DiskFileItemFactory();
//		 Create a new file upload handler
		ServletFileUpload upload =  new  ServletFileUpload(factory);

        DeferredFileOutputStream dfos =  null ; //  Объявляем dfos для демонстрации, что класс виден       

         try  {
			//		 Parse the request
			List items = upload.parseRequest(req); // А вот здесь класс DeferredFileOutputStream уже не виден
//			 Process the uploaded items
			...
        }  catch  (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		
      	resp.sendRedirect("DataPage");
	}

}
Так почему же сервер не ругается на строчку "DeferredFileOutputStream dfos = null;", а ругается на "List items = upload.parseRequest(req);", указывая, что класс DeferredFileOutputStream не найден?
...
Рейтинг: 0 / 0
31.10.2007, 11:16:22
    #34906778
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Semen PopovВот какая штука интересная получается!
...
Если из кода сервлета убрать конструкцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
         try  {
			//		 Parse the request
			List items = upload.parseRequest(req); // А вот здесь класс DeferredFileOutputStream уже не виден
//			 Process the uploaded items
			...
        }  catch  (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
то ошибка не возникает.
Получается, что класс org.apache.commons.fileupload.servlet.ServletFileUpload использует org.apache.commons.io.output.DeferredFileOutputStream, но найти его не может. Хотя в отдельности оба класса подключаю в сервлете и могу работать без ошибок.
Чудеса или руки.sys?
...
Рейтинг: 0 / 0
31.10.2007, 12:58:33
    #34907320
dmatsynin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
Насколько я помню для того чтобы библиотеки попали куда нужно и правильно сформировать EAR файл, нужно говорить (правой кнопкой мыши по проекту) Deploy или Prepare for Deployment, по крайней мере в 7м РСА так называется, в 6м не помню.
...
Рейтинг: 0 / 0
31.10.2007, 14:13:14
    #34907646
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
dmatsyninНасколько я помню для того чтобы библиотеки попали куда нужно и правильно сформировать EAR файл, нужно говорить (правой кнопкой мыши по проекту) Deploy или Prepare for Deployment, по крайней мере в 7м РСА так называется, в 6м не помню.
Спасибо. Но библиотеки лежат уже там, где надо. Советовали в WEB-INF/lib, вот я и запульнул их туда. Не сразу это получилось, но сейчас это так. Даже пути к этим библиотекам указаны относительно проекта "WebContent/WEB-INF/lib/commons-fileupload-1.2.jar" и "WebContent/WEB-INF/lib/commons-io-1.3.2.jar" и при экспорте в EAR они выгружаются туда. Проблема в том, что при выполнении сервлета выдается ошибка:
Код: plaintext
1.
2.
3.
4.
5.
[31.10.07 9:24:18:844 MSK] 00000040 WebApp        E   SRVE0026E: [Servlet Error]-[ImportPensData]: java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
	at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:191)
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:350)
	at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	at com.pfrkomi.penstransit.ImportPensData.doPost(ImportPensData.java:48)

Я понял, что классы fileupload не видят классы commons.io (они их используют), хотя сервлет в отдельности видит и те и другие.
...
Рейтинг: 0 / 0
31.10.2007, 14:51:06
    #34907811
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RAD 6.0 и fileupload
А может в этом дело (вырезка из FileUpload FAQ)?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Why is NoClassDefFoundError being thrown? 

There are two common causes for this error. 

Firstly, it might simply mean that you do not have the Commons IO jar in your classpath. FileUpload depends on IO (see dependencies) - you can tell if this is the case if the missing class is within the org.apache.commons.io package. 

Secondly this happens when attempting to rely on a shared copy of the Commons FileUpload jar file provided by your web container. The solution is to include the FileUpload jar file as part of your own web application, instead of relying on the container. The same may hold for FileUpload's IO dependency.
Только как это проверить?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / RAD 6.0 и fileupload / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]