【问题标题】:How is the JasperServer REST client path?JasperServer REST 客户端路径如何?
【发布时间】:2016-05-29 11:35:42
【问题描述】:

我正在努力使用 jasperserver 提供客户端休息服务以生成报告。我正在使用以下代码来实现:

我在设置服务器 url 和报告路径时遇到问题, 对于服务器网址,我输入了http://localhost:8081/jasperserver/ 如下图所示,我输入了报告路径rest/report/mytest/my_report,但在行中出现 404 not found 错误

File remoteFile = resource.get(File.class);

那么如何从 jasperserver 获取正确的报告路径?

public class App2 {

private final static String serverUrl = "http://localhost:8081
   /jasperserver/";
private final static String serverUser = "jasperadmin";
private final static String serverPassword = "jasperadmin";

public static void main(String arg[]) throws Exception {
    Report reporte = new Report();
    reporte.setFormat("pdf");
    reporte.setOutputFolder("/home/ali/images");
    ClientConfig clientConfig;
    Map<String, String> resourceCache=new HashMap<String, String>();
    clientConfig = new DefaultApacheHttpClientConfig();
    clientConfig.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
    clientConfig.getProperties().put(ApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true);
    ApacheHttpClient client = ApacheHttpClient.create(clientConfig);
    client.addFilter(new HTTPBasicAuthFilter(serverUser, serverPassword));
    String describeResourcePath = "/rest/resource" + "/mytest/my_report/";
    String generateReportPath = "/rest/report" + "/mytest/my_report/" + "?RUN_OUTPUT_FORMAT=" + reporte.getFormat();
    WebResource resource = null;
    String resourceResponse = null;
    if (resourceCache.containsKey(describeResourcePath)) {
        resourceResponse = resourceCache.get(describeResourcePath);
    } else {
        resource = client.resource(serverUrl);
        resource.accept(MediaType.APPLICATION_XML);
        resourceResponse = resource.path(describeResourcePath).get(String.class);
        resourceCache.put(describeResourcePath, resourceResponse);
    }
    Document resourceXML = parseResource(resourceResponse);
    resourceXML = addParametersToResource(resourceXML, reporte);
    resource = client.resource(serverUrl  + generateReportPath);
    resource.accept(MediaType.TEXT_XML);
    System.out.println(resource);
    String reportResponse = resource.put(String.class, serializetoXML(resourceXML));
    String urlReport = parseReport(reportResponse);
    resource = client.resource(urlReport);
    System.out.println(resource);
    File destFile = null;
    try {
        File remoteFile = resource.get(File.class);
        File parentDir = new File(reporte.getOutputFolder());
        destFile = File.createTempFile("report_", "." + getExtension(reporte.getFormat()), parentDir);
        FileUtils.copyFile(remoteFile, destFile);
    } catch (IOException e) {
        throw e;
    }
}

/**
 * 
 * @return
 * @throws DocumentException
 */
private static Document parseResource(String resourceAsText) throws Exception {
    // LOGGER.debug("parseResource:\n" + resourceAsText);
    Document document;
    try {
        document = DocumentHelper.parseText(resourceAsText);
    } catch (DocumentException e) {
        throw e;
    }
    return document;
}

/**
 * 
 */
private static String parseReport(String reportResponse) throws Exception {
    String urlReport = null;
    try {
        Document document = DocumentHelper.parseText(reportResponse);
        Node node = document.selectSingleNode("/report/uuid");
        String uuid = node.getText();
        node = document.selectSingleNode("/report/totalPages");
        Integer totalPages = Integer.parseInt(node.getText());
        if (totalPages == 0) {
            throw new Exception("Error generando reporte");
        }
        urlReport = serverUrl + "/report/" + uuid + "?file=report";
    } catch (DocumentException e) {
        throw e;
    }
    return urlReport;
}

/**
 * 
 * @param resource
 * @param reporte
 * @return
 */
private static Document addParametersToResource(Document resource, Report reporte) {
    // LOGGER.debug("addParametersToResource");

    Element root = resource.getRootElement();
    Map<String, String> params = reporte.getParams();
    for (Map.Entry<String, String> entry : params.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
        if (key != null && value != null) {
            root.addElement("parameter").addAttribute("name", key).addText(value);
        }
    }
    // LOGGER.debug("resource:" + resource.asXML());
    return resource;
}

/**
 * 
 * @param aEncodingScheme
 * @throws IOException
 * @throws Exception
 */
private static String serializetoXML(Document resource) throws Exception {
    OutputFormat outformat = OutputFormat.createCompactFormat();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    outformat.setEncoding("ISO-8859-1");

    try {
        XMLWriter writer = new XMLWriter(out, outformat);
        writer.write(resource);
        writer.flush();
    } catch (IOException e) {
        throw e;
    }
    return out.toString();
}

/**
 * 
 * @param format
 * @return
 */
private static String getExtension(String format) {
    String ext = null;
    if (format.equals(Report.FORMAT_PDF)) {
        ext = "pdf";
    } else if (format.equals(Report.FORMAT_EXCEL)) {
        ext = "xls";
    }
    return ext;
}

}

【问题讨论】:

    标签: java jasper-reports jasperserver jersey-client


    【解决方案1】:

    我已经修好了,我需要改变路径

    urlReport = serverUrl + "/report/" + uuid + "?file=report"; 
    

    urlReport = serverUrl + "/rest/report/" + uuid + "?file=report";
    

    在parseReport方法中

    private static String parseReport(String reportResponse) throws Exception {
    String urlReport = null;
    try {
        Document document = DocumentHelper.parseText(reportResponse);
        Node node = document.selectSingleNode("/report/uuid");
        String uuid = node.getText();
        node = document.selectSingleNode("/report/totalPages");
        Integer totalPages = Integer.parseInt(node.getText());
        if (totalPages == 0) {
            throw new Exception("Error generando reporte");
        }
        urlReport = serverUrl + "/report/" + uuid + "?file=report";
    } catch (DocumentException e) {
        throw e;
    }
    return urlReport;
    

    }

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 2012-04-18
      • 2011-09-27
      • 1970-01-01
      • 2015-04-23
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多