【问题标题】:How to upload a jrxml file through JasperServer api using node js如何使用节点js通过JasperServer api上传jrxml文件
【发布时间】:2016-10-13 22:15:42
【问题描述】:

我正在尝试通过 putRequest api 将 jrxml 文件上传到 Jasper 服务器。使用以下 xml 输入在服务器 MyReports 路径中添加报告条目

xml

<?xml version="1.0" encoding="UTF-8"?>
<request operationName="put" locale="en">
<argument name="CREATE_REPORTUNIT_BOOLEAN">true</argument>
<!--MainReportunit-->
<resourceDescriptor name="TestReport1" wsType="reportUnit"     uriString="/reports/Myreports/TestReport1" isNew="true">
  <label><![CDATA[TestReport1]]></label>
  <description><![CDATA[TestReport1]]></description>
  <resourceProperty name="PROP_RESOURCE_TYPE">
     <value><![CDATA[com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit]]></value>
  </resourceProperty>
  <resourceProperty name="PROP_PARENT_FOLDER">
     <value><![CDATA[/reports/Myreports]]></value>
  </resourceProperty>
  <resourceProperty name="PROP_RU_ALWAYS_PROPMT_CONTROLS">
     <value><![CDATA[true]]></value>
  </resourceProperty>
  <resourceProperty name="PROP_RU_CONTROLS_LAYOUT">
     <value><![CDATA[1]]></value>
  </resourceProperty>
  <resourceDescriptor wsType="datasource" isNew="false">
     <resourceProperty name="PROP_REFERENCE_URI">
        <value><![CDATA[/datasources/{DATASOURCE_NAME}]]></value>
     </resourceProperty>
     <resourceProperty name="PROP_IS_REFERENCE">
        <value><![CDATA[true]]></value>
     </resourceProperty>
  </resourceDescriptor>
  <resourceDescriptor name="TestReport1" wsType="jrxml" uriString="/reports/Myreports/TestReport1" isNew="true">
     <label><![CDATA[TestReport1]]></label>
     <description><![CDATA[TestReport1]]></description>
     <resourceProperty name="PROP_RESOURCE_TYPE">
        <value><![CDATA[com.jaspersoft.jasperserver.api.metadata.common.domain.FileResource]]></value>
     </resourceProperty>
     <resourceProperty name="PROP_HAS_DATA">
        <value><![CDATA[true]]></value>
     </resourceProperty>
     <resourceProperty name="PROP_RU_IS_MAIN_REPORT">
        <value><![CDATA[true]]></value>
     </resourceProperty>
  </resourceDescriptor>
</resourceDescriptor>
</request>

节点js代码

var parameters = {
        putRequest: RequestXmlStr
    }
var soap = require('soap');
soap.createClient(url, function (err, client) {
 client.put(parameters, function (err, result) {
        if (err) console.error(err);
    });

});

没有附件就可以正常工作。但我不知道,在这个 xml 中在哪里包含 jrxml 数据或 base64 字符串。

【问题讨论】:

  • SOAP Web 服务是必需的吗?使用 REST_V2 可能会更容易
  • 不,SOAP 方法不是强制性的。我需要在 Node.js 中实现这一点。

标签: node.js jasperserver


【解决方案1】:

由于 SOAP 不是必需的,因此我将它与 REST_v2 服务一起使用的方法如下:

var request = require("request"),
  fs = require("fs"),
  reportUnitDescriptor = {
    "label": "My Report Unit",
    "description": "My First Report Unit",
    "alwaysPromptControls": "true",
    "controlsLayout": "popupScreen",
    "dataSource": {
        "dataSourceReference": {
            "uri": "/analysis/datasources/FoodmartDataSourceJNDI"
        }
    },
    "jrxml": {
        "jrxmlFile": {
            "label": "Main JRXML",
            "type": "jrxml"
        }
    }   
};

request.post({
  url: "http://localhost:8080/jasperserver/rest_v2/resources/public",
  auth: { user: "jasperadmin", password: "jasperadmin" },
  formData: {
    resource: {
      value: JSON.stringify(reportUnitDescriptor),
      options: {
        contentType: "application/repository.reportUnit+json"
      }
    },
    jrxml: fs.createReadStream(__dirname + '/MainReport.jrxml'),
  }
}, function(err, response, body) {
  console.log("status: " + response.statusCode + "; message: " + response.statusMessage);
});

一些注意事项:

  • 将在Public 文件夹中创建reportUnit。您在/resources 部分之后的URL 中指定。
  • MainReport.jrxml 与此脚本位于同一目录中
  • 更多关于 REST_v2 API 的信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2017-08-30
    • 2014-09-11
    • 1970-01-01
    • 2014-03-06
    • 2016-06-25
    相关资源
    最近更新 更多