HttpURLConnection Post请求,响应来自javax.rs.ws.Response对象的响应



我正在尝试使一个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();
}

最新更新