java MultipartEntityBuilder java.lang.Ошибка связи

#java #http #servlets #file-upload #mime

#Ява #http #сервлеты #файл-загрузить #мим

Вопрос:

У меня есть Java-приложение, работающее под управлением Apache Tomcat 8.0.21.0 на сервере RHEL 7.8. Он принимает входные данные из браузера и загружает файл в другое приложение Java, работающее на удаленном сервере.

Частичный код является:

 // FileItem "fileToUpload" is passed by a HTML input type "file" in a JSP page private void doPost (HttpServletRequest request, HttpServletResponse response)   throws IOException, ServletException {  try  {  if (ServletFileUpload.isMultipartContent (request))  {  FileItemFactory factory = new DiskFileItemFactory ();  ServletFileUpload upload = new ServletFileUpload (factory);  Listlt;FileItemgt; fileItems = upload.parseRequest (request);   // findFileItem () and generateFileDetails () are local functions  FileItem fileItemToUpload = findFileItem (fileItems, "fileToUpload");  String fileDetails = generateFileDetails (fileItemToUpload);   MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create ();  entityBuilder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE);  entityBuilder.addTextBody ("fileDetails", fileDetails);   InputStream is = fileItemToUpload.getInputStream ();  entityBuilder.addBinaryBody ("is", is);   HttpEntity entity = entityBuilder.build (); // Exception thrown here   String url = "[remote server URL]";  CloseableHttpClient httpClient = HttpClients.createDefault ();  HttpPost httpPost = new HttpPost (url);  httpPost.setEntity (entity);   CloseableHttpResponse response = httpClient.execute (httpPost);  .  .  .  response.close ();  httpClient.close ();  }  else  {  /* handle non-multipart POSTs */  }  }  catch (Exception e)  {  .  .  .  } }  

Довольно многословное Исключение:

java.lang.Ошибка ссылки: нарушение ограничений загрузчика: при разрешении метода «org.apache.http.entity.mime.MultipartEntityBuilder.build()Lorg/apache/http/HttpEntity;» загрузчик классов (экземпляр org/apache/catalina/загрузчик/WebappClassLoader) текущего класса, uri_test_main/HttpHdlr, и загрузчик классов (экземпляр java/net/URLClassLoader) для класса, определяющего метод, org/apache/http/entity/mime/MultipartEntityBuilder, имеют разные объекты класса для типа er.build()Lorg/apache/http/HttpEntity; используется в подписи

выбрасывается строка: «Сущность HttpEntity = EntityBuilder.build ();»

Примечание.Исключение является постоянным для всех продуктов браузера.

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

Ответ №1:

Это приложение, разработанное в среде Eclipse IDE, настроенное как проект Maven. Внешняя БАНКА httpmime-4.5.6.jar необходимо добавить в путь сборки Java проекта и зависимость:

 lt;dependencygt;  lt;groupIdgt;org.apache.httpcomponentslt;/groupIdgt;  lt;artifactIdgt;httpmimelt;/artifactIdgt;  lt;versiongt;4.5.6lt;/versiongt; lt;/dependencygt;  

необходимо добавить к зависимостям в pom.xml.