Я пытаюсь сделать один вызов веб-службы второй веб-службой. Первый - это тонкий слой доступа. Моя нижняя вебсервис выглядит так,HttpURLConnection Post Request отвечает на ответ от javax.rs.ws.Response Object
@POST
@Path("/savechart")
@Produces("image/png")
public Response saveChart(@FormParam("chartId") String chartId, @FormParam("chartType") String chartType,
@FormParam("chartSubType") String chartSubType, @FormParam("authJsonMap") String authJsonMap,
@FormParam("chartParameters") String parameters, @FormParam("chartLocation") String chartLocation) {
try {
// String dataDetails = " Saved Chart ";
if (chartId != null && !"".equalsIgnoreCase(chartId)) {
}
// SubProcessService subProcess = DaoRegistry.getSubProcessService();
PhantomHelper p = new PhantomHelper("phantomjs");
BufferedImage chart = p.saveChart(chartLocation , chartId, chartType, chartSubType, authJsonMap, parameters);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
ImageIO.write(chart, "png", bao);
byte[] imageData = bao.toByteArray();
if (imageData == null) {
return Response.status(210).build();
}
p.kill();
// the request is received
return Response.ok(new ByteArrayInputStream(imageData))
.build();
}
catch (Exception exe)
{
System.out.println("Save Chart Exception: " + exe.toString());
System.out.println("Save Chart Exception: " + exe.getStackTrace().toString());
exe.printStackTrace(System.out);
return Response.status(500).entity("Error Saving Chart : " + exe.getStackTrace()).build();
}
}
Его веб-сервис, который создает файл в формате PNG и отправляет обратно изображение в объекте ответа, который имеет ByteArrayInputStream() в качестве своей сущности. Это работает, если я отправляю запрос POST прямо, но я хочу пройти через отдельный веб-сервис. Вот что я пытаюсь сделать, чтобы читать в ответ, а затем срыгивать.
public Response POST() throws Exception {
// Create Post Request
URL requestUrl = new URL(url);
connection = (HttpURLConnection) requestUrl.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("User-Agent" , USER_AGENT);
connection.setRequestProperty("Accept-Language" , ACCEPT_LANGUAGE);
// User assigned properties to header
if (requestProperties != null) {
for (String key : requestProperties.keySet()) {
connection.setRequestProperty(key , requestProperties.get(key));
}
}
// Construct URL
String urlParameters = constructUrl(parameters);
connection.setDoOutput(true);
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(urlParameters);
out.flush();
out.close();
// BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
return Response.status(200).entity(connection.getInputStream()).build();
}
Но это не сработает. Я не могу понять, как использовать ответ, преобразовать его обратно в объект ответа и отправить его.