Я пытаюсь загрузить PDF-файл, доступный по одному из остальных URL-адресов, используя JAX RS и Jersey с авторизацией.
import org.apache.commons.io.IOUtils;
import javax.net.ssl.*;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.File;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
public class ReportView {
public void process(String authStringEnc) {
System.setProperty("javax.net.ssl.trustStore","C:\\Users\\alim\\Desktop\\my-app\\stage\\npkeystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword","changeit");
System.setProperty("javax.net.ssl.trustAnchors","C:\\Users\\alim\\Desktop\\my-app\\stage\\npkeystore.jks");
Client client = ClientBuilder.newClient();
// WebTarget target = client.target("https://x.x.x.x/api/profiler/1.0/reporting/reports/751252/").path("view");
WebTarget target = client.target("https://x.x.x.x/api/profiler/1.0/reporting/reports/751252/view");
Response resp = target.request("application/pdf,image/jpeg,application/xml,application/vnd.ms-excel").header("Authorization", authStringEnc).get(Response.class);
System.out.println("Code : " + resp.getStatus());
if(resp.getStatus() == Response.Status.OK.getStatusCode()) {
InputStream is = resp.readEntity(InputStream.class);
File downloadfile = new File("C://Users/alim/Downloads/view.pdf");
try {
byte[] byteArray = IOUtils.toByteArray(is);
FileOutputStream fos = new FileOutputStream(downloadfile);
fos.write(byteArray);
fos.flush();
fos.close();
}catch(Exception e){
e.getMessage();
}
IOUtils.closeQuietly(is);
System.out.println("the file details after call:"+ downloadfile.getAbsolutePath()+", size is "+downloadfile.length());
}
else{
throw new WebApplicationException("Http Call failed. response code is"+resp.getStatus()+". Error reported is"+resp.getStatusInfo());
}
}
Но приведенный выше фрагмент кода возвращает 400 Bad Request. Не уверен, что неправильно указал URL. Использование того же URL-адреса в Postman возвращает PDF-файл.
Exception in thread "main" javax.ws.rs.WebApplicationException: Http Call failed. response code is 400. Error reported is Bad Request
Также удаление блока сертификата возвращает мне исключение сертификации PKIX, хотя я уже определил его в основном классе и использовал его в одном из подклассов.
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Концепции JAX-RS и Jersey для меня довольно новы. Не уверен, где я ошибаюсь с точки зрения указания URL-адреса с аутентификацией, сертификатом и запросом.
Любая помощь/руководство по тому же самому действительно поможет.
http://enos.itcollege.ee/~jpoial/java/naited/pildid/corejava.pdf
, чтобы убедиться, что вы можете загружать PDF-файлы (заголовок авторизации не требуется) - person Bentaye   schedule 26.11.2018