最近在作一个项目,想使用 ruby 调用 JasperReports Server WebService REST API,在官方的文档 creating a resource 中,如果简单的实现上传数据源之类的,我已经实现,但是当需要上传报表模板的时候,需要在请求中,上传一个 jrxml 文件,这一点我始终没有实现。我之前使用的是 RestClient,个人认为我还是在使用 multipart request 的时候出问题了,以下是源码:
require 'rubygems'
require 'rest_client'
#require 'rexml/document'
#get server information report_server = "http://172.17.17.110:8080/jasperserver" report_user = "jasperadmin" report_password = "jasperadmin"
#login to JasperServer and acquire cookies for its session response_login = RestClient.post( "#{report_server}/rest/login", {:j_username => report_user, :j_password => report_password} )
puts response_login.code
resource_descriptor= "《resourceDescriptor name='current_states' wsType='reportUnit' uriString='/SHL/shlazww/current_states' isNew='false'》 《label><![CDATA[current_states]]> 《creationDate>1368670232940 《resourceProperty name='PROP_RESOURCE_TYPE'> 《![CDATA[com.jaspersoft.jasperserver.api.metadata.common.domain.FileResource]]> 《/resourceProperty> 《resourceProperty name='PROP_PARENT_FOLDER'> <![CDATA[/SHL/shlazww]]> 《/resourceProperty> 《resourceProperty name='PROP_VERSION'> 《value><![CDATA[0]]> 《/resourceProperty> 《resourceProperty name='PROP_SECURITY_PERMISSION_MASK'> 《value><![CDATA[3]]> 《/resourceProperty> 《resourceProperty name='PROP_IS_REFERENCE'> 《value><![CDATA[false]]> 《/resourceProperty> 《resourceProperty name='PROP_HAS_DATA'> 《value><![CDATA[true]]> 《/resourceProperty> 《resourceProperty name='PROP_ATTACHMENT_ID'> 《value><![CDATA[attachment]]> 《/resourceProperty> 《/resourceDescriptor> " #get resourceDescriptor before generate the report response_resource = RestClient.put("#{report_server}/rest/resource", {:ResourceDescriptor => resource_descriptor,:myfile => File.new("/root/Documents/current_states.jrxml",'rb')} , {:cookies => {"JSESSIONID" => response_login.cookies["JSESSIONID"]}}) 个人觉得还是在处理,resource_descriptor,文件上传,session 的时候,multipart request 没有设置好,请问大家知道问题在那里么?
以下是 jasper 的官方文档: