1 つの Web サービスが 2 番目の Web サービスを呼び出そうとしています。最初の Web サービスはやや薄いアクセス レイヤーです。私の一番下のWebサービスは次のようになります。
@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() を持つ応答オブジェクトで画像を返す Web サービスです。これは、POST リクエストを直接送信した場合に機能しますが、別の Web サービスを経由したいと考えています。これが私が応答を読んで逆流するためにやろうとしていることです。
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();
}
しかし、これはうまくいきません。応答を消費し、それを応答オブジェクトに変換して送信する方法がわかりません。