发送。
我正在尝试使一个web服务调用第二个web服务,第一个是某种程度上的瘦访问层。下面的webservice是这样的
@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();
}
}
这是一个web服务,它创建一个png文件,并在一个响应对象中返回图像,该响应对象以ByteArrayInputStream()作为其实体。如果我直接向它发送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();
}
但这不起作用。我不知道如何使用响应,将其转换回响应对象并通过
通过将响应读取为字节数组,然后使用类似的ByteArrayOutputStream响应来修复此过程。代码在
下面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);
OutputStream outStream = connection.getOutputStream();
DataOutputStream out = new DataOutputStream(outStream);
out.writeBytes(urlParameters);
out.flush();
out.close();
byte[] input = IOUtils.toByteArray(connection.getInputStream());
return Response.status(200).entity(new ByteArrayInputStream(input)).build();
}