Чувак, большое спасибо, это был самый полезный пост, который я нашел о получении отчетов из JasperServer через REST, и я использую Ruby on Rails. После обновления до JS 5.0 я обнаружил, что интерфейс SOAP очень ненадежен, в основном вам пришлось дважды нажать его, чтобы сгенерировать отчет. У меня был нулевой успех с интерфейсом rest_v2, казалось, он никогда не соблюдал никаких параметров, переданных ему.
Итак, я попробовал старый интерфейс REST и он работал нормально. Для парней из Rails вот мой (немного грязный) консольный код.
report = 'TempSpeedLimit'
params = {:tsl_id => 744}
request_body = "<resourceDescriptor name='#{report}' wsType='reportUnit' uriString='/reports/hawk/#{report}' isNew='false'><label>null</label>"
params.each{|k,v| request_body += "<parameter name='#{k}'>#{v}</parameter>"}
request_body += "</resourceDescriptor>"
body_put = ''
body_get = ''
cookie_put = ''
uri_put = URI.parse("http://<yourhost>:8080/jasperserver/rest/report/reports/hawk/#{report}")
http_put = Net::HTTP.new(uri_put.host, uri_put.port)
http_put.start do |http|
req = Net::HTTP::Put.new(uri_put.path + "?RUN_OUTPUT_FORMAT=PDF")
req.basic_auth('jasperadmin', 'secretpassword')
req.body = request_body
resp = http.request(req)
body_put = resp.body
cookie_put = resp['Set-Cookie']
end
xml = REXML::Document.new(body_put)
uuid = xml.elements["report/uuid"].text
uri_get = URI.parse("http://<yourhost>:8080/jasperserver/rest/report/#{uuid}")
http_get = Net::HTTP.new(uri_get.host, uri_get.port)
http_get.start do |http|
req = Net::HTTP::Get.new(uri_get.path + "?file=report")
req.basic_auth('jasperadmin', 'secretpassword')
req['cookie'] = cookie_put
resp = http.request(req)
body_get = resp.body
end
f = File.new('test.pdf', 'wb')
f.write(body_get)
f.close