2012-03-08 26 views
11

का उपयोग कर जैस्परसेवर से रिपोर्ट प्राप्त करें आप वेब एप्लिकेशन से मैंज प्राप्त करने और रिपोर्ट चलाने के लिए जास्पर्सरवर्क्स webservices (SOAP और REST उपलब्ध है) का उपयोग कर सकते हैं। एसओएपी wsdl asp.net C# के साथ संगत नहीं है (कम से कम, मैं इसे काम नहीं कर सकता), इसलिए मैंने आरईएसटी webservice का उपयोग करने का फैसला किया।आरईएसटी webservice और asp.net सी #

मैं वहां पर हूं, लेकिन मैं रिपोर्ट को पुनः प्राप्त नहीं कर सकता। क्या किसी को पता है कि क्या गलत है? मैं लिनक्स पर जैस्परसेवर सीई 4.5 का उपयोग कर रहा हूं।

// Setup WebClient 
WebClient httpclient = new WebClient(); 

//Basic Auth 
httpclient.Credentials = new NetworkCredential("NAME", "PASSWD"); 
httpclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 

// Build resourceDescriptor 
string requestXml; 
requestXml = "<resourceDescriptor name="budget_overzicht_per_klant" wsType="reportUnit" uriString="/Declaraties/12change/Klant/budget_overzicht_per_klant"n"; 
requestXml += " isNew="false">n"; 
requestXml += " <label>null</label>n"; 
requestXml += " <parameter name="klantid">14</parameter>n"; 
requestXml += " <parameter name="start">20120101</parameter>n"; 
requestXml += " <parameter name="eind">20120302'</parameter>n"; 
requestXml += " <parameter name="Titel">Test 123</parameter>n"; 
requestXml += "</resourceDescriptor>n"; 

// Send PUT 
string requestAllResult = httpclient.UploadString("http://website/jasperserver/rest/report/Declaraties/12change/Klant/budget_overzicht_per_klant?RUN_OUTPUT_FORMAT=PDF", "PUT", requestXml); 

// requestAllResult contains: 
//<report> 
// <uuid>f521fe7d-7432-4c47-962c-9fec29bdaa43</uuid> 
// <originalUri>/Declaraties/12change/Klant/budget_overzicht_per_klant</originalUri> 
// <totalPages>4</totalPages> 
// <startPage>1</startPage> 
// <endPage>4</endPage> 
// <file type="application/pdf"><![CDATA[report]]></file> 
//</report> 
// You have to use the uuid to GET the file 'report' 
// 
// Extract uuid, filename is always report 
System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
doc.LoadXml(requestAllResult); 
XmlNode node = doc.DocumentElement.SelectSingleNode("uuid"); 
string uuid = node.InnerText; 

//Build GET URL 
string reportUrl = "http://website/jasperserver/rest/report/"; 
reportUrl += uuid; 
reportUrl += "?file=report"; 

// the value of report Url is now 
// "http://website/jasperserver/rest/report/f521fe7d-7432-4c47-962c-9fec29bdaa43?file=report" 

// Get report 
string report; 
report = httpclient.DownloadString(reportUrl); 

// Exception, HTTP 404 ERROR???? 

त्रुटि का मतलब यह है कि यूयूआईडी वर्तमान सत्र में नहीं है। किसी को यह काम मिल गया है? धन्यवाद!

उत्तर

13

मैं अपने ही सवाल का जवाब देंगे:

PUT प्रतिक्रिया हेडर में एक कुकी देता है, आप बाद में प्राप्त में उपयोग करने के लिए है:

// Send PUT 
string requestAllResult = httpclient.UploadString("http://website/jasperserver/rest/report/Declaraties/12change/Klant/budget_overzicht_per_klant?RUN_OUTPUT_FORMAT=PDF", "PUT", requestXml); 

// Get session cookie 
string session = httpclient.ResponseHeaders.Get("Set-Cookie"); 
// Set session cookie 
httpclient.Headers.Add("Cookie", session); 

// Get report 
report=httpclient.DownloadString("http://website/jasperserver/rest/report/f521fe7d-7432-4c47-962c-9fec29bdaa43?file=report"); 

और बस हो गया!

+0

मेरा मानना ​​है कि PUT 'http: // वेबसाइट/jasperserver/rest/report? RUN_OUTPUT_FORMAT = PDF' के विरुद्ध होना चाहिए संस्करण संस्करण के रूप में कम से कम 4.5 – KCD

1

दोस्त बहुत धन्यवाद, यह आरएसटी के माध्यम से जैस्परसेवर से रिपोर्ट प्राप्त करने के लिए पाया गया एकमात्र सबसे उपयोगी पोस्ट था, और मैं रूबी पर रूबी का उपयोग कर रहा हूं। जेएस 5.0 में अपग्रेड करने के बाद मुझे एसओएपी इंटरफ़ेस बहुत अविश्वसनीय पाया गया, मूल रूप से आपको इसे उत्पन्न करने के लिए इसे दो बार मारा जाना था। मुझे rest_v2 इंटरफ़ेस के साथ शून्य सफलता मिली, यह कभी भी पारित किसी भी पैरामीटर का सम्मान करने के लिए प्रतीत नहीं हुआ।

इसलिए मैंने पुराने आरईएसटी इंटरफेस और इसके कामकाजी जुर्माना की कोशिश की। किसी भी रेल के लिए, यहां मेरा (थोड़ा गन्दा) कंसोल कोड है।

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