J'ai pu le faire en appelant une routine Java à partir de l'adaptateur pour appeler le service back-end qui renvoie le PDF en tant que byte[]
. Une fois la byte[]
est récupéré je base64
Encodez-le dans la routine Java, URI le codez dans l'adaptateur, puis faites l'inverse dans le code JS client. Le code Java utilise l'Apache HttpClient
. J'ai essayé le type de retour ordinaire ainsi que les autres sans chance.
Code de l'adaptateur:
var service = new ServiceClient();
var pdf = service.getUnsecureContentBase64(url);
result.pdf = encodeURIComponent(pdf);
return result;
Code client:
onSuccess : function (response){
var pdfText = decodeURIComponent(response.invocationResult.pdf);
var pdf = base64DecToArr(pdfText);
//use pdf byte[] to pass to Mozilla pdf.js
var pdfText = decodeURIComponent(response.invocationResult.pdf);
var pdf = base64DecToArr(pdfText);
PDFJS.disableWorker = false;
PDFJS.getDocument(pdf).then(function (pdfDoc) {
//use pdfDoc to render
});
}
Code Java:
public class ServiceClient {
public String getUnsecureContentBase64(String url)
throws ClientProtocolException, IOException {
byte[] result = getUnsecureContent(url);
return Base64.encodeBase64String(result);
}
public byte[] getUnsecureContent(String url)
throws ClientProtocolException, IOException {
byte[] result = null;
CloseableHttpClient httpclient = null;
try {
httpclient = HttpClientBuilder.create()
.setRedirectStrategy(new LaxRedirectStrategy()).build();
HttpGet httpget = new HttpGet(url);
// Create a response handler
ResponseHandler<byte[]> handler = new ResponseHandler<byte[]>() {
public byte[] handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
HttpEntity entity = response.getEntity();
if (entity != null) {
return EntityUtils.toByteArray(entity);
} else {
return null;
}
}
};
result = httpclient.execute(httpget, handler);
} finally {
if (httpclient != null) {
httpclient.close();
}
}
return result;
}
}