Я не могу загрузить файл JAR, используя Webdav и Apache HTTPClient, не приводя к «неверному или поврежденному jarfile» при попытке его запустить.
Вот мои настройки:
- Сервер Webdav, использующий tomcat 8.5 во внешнем каталоге (определен в $ CATALINA_HOME / conf / Catalina / localhost / webdav.xml)
- Клиент Apache HTTP (org.apache.httpcomponents: httpclient: 4.5.5)
- Пользовательский подключаемый модуль Maven с использованием HTTP-клиента для загрузки файла
Файл загружается с использованием настраиваемого подключаемого модуля Maven (который использует HTTP-клиент внутри) после создания JAR.
Если я попытаюсь использовать HTTP-клиент для загрузки файла на удаленный сервер, это приведет к повреждению.Но я могу запустить Jar без проблем, если я отправляю тот же файл с помощью команды curl
curl -u <user>:<pass> -T <myjar>.jar http://<remotehost>/<myjar>.jar
Вот пример кода с использованием клиента HTTP:
class FileSender {
public static void main(String[] args) {
// [...]
RequestConfig.Builder cfg = RequestConfig.copy(RequestConfig.DEFAULT);
cfg = cfg.setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout)
.setSocketTimeout(timeout);
CredentialsProvider credentialsProvider = authentication.credentials();
HttpClientBuilder builder = HttpClientBuilder.create()
.setDefaultRequestConfig(cfg.build())
.setDefaultCredentialsProvider(credentialsProvider);
try(CloseableHttpClient client = builder.build()) {
HttpPut httpPut = new HttpPut("http://<remote>/<myJar>.jar");
httpPut.setEntity(MultipartEntityBuilder.create()
.addBinaryBody("file", new File("path/to/<myJar>.jar"))
.build());
try (CloseableHttpResponse response = client.execute(httpPut)) {
// Check response HTTP status
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Есть ли у вас что может вызвать мою проблему?
Редактировать: MD5-хэши кажутся разными, если я использую HTTP Client и CURL, но копии CURL и FTP используют одни и те же хэши.