Jump to content
We've recently updated our Privacy Statement, available here ×

mzukowski

Members
  • Posts

    17
  • Joined

  • Last visited

mzukowski's Achievements

Apprentice

Apprentice (3/14)

  • First Post Rare
  • Collaborator Rare
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

0

Reputation

  1. If anyone is interested, I just posted code for a simple PHP client for fetching reports from JasperServer via SOAP. See here: http://sneakybits.blogspot.com/2008/11/php-client-for-jasperserver-via-soap.html and here: http://pastebin.com/f65edd4c8 Post Edited by Matt Zukowski at 11/12/08 18:59
  2. If anyone is interested, there is now a downloadable JasperServer Ruby client available at: http://rubyforge.org/projects/jasper-client/ Development info is on Github under: http://github.com/gunark/jasperserver-client/tree/master Usage on rails looks something like: Code: Post Edited by Matt Zukowski at 11/12/08 19:01
  3. Sorry, that first link should be: http://jasper-client.rubyforge.org
  4. There's been some discussion here about this in the past, so I thought I'd let everyone know that I've released a Ruby-based client for JasperServer. The client is installable as a RubyGem by running: gem install jasperserver-client There's a fair bit of information including usage examples available at: http://jasperserver-client.rubyforge.org And: http://github.com/gunark/jasperserver-client/wikis
  5. Oops those links didn't come through properly. Link for Ruby client of JasperServer is: http://github.com/gunark/jasperserver-client/wikis/home Link for tutorial on how to get Flash reports out of JasperServer is: http://github.com/gunark/jasperserver-client/wikis/railsusageexamples
  6. If anyone is interested, I posted a quick tutorial on how to get Flash reports from JasperServer under Ruby on Rails. The tutorial is here: http://github.com/gunark/jasperserver-client/wikis/railsusageexamples To make this work, you'll need the jasperserver-client RubyGem. Info on installing it is here: http://github.com/gunark/jasperserver-client/wikis/home
  7. Thank you, but is there any way to request the report in Flash format using the web services API (since you can already request it in other formats -- PDF, CSV, etc.)
  8. The JasperServer 3.0 release notes mention that there is now support for generating reports in flash format. How do I go about generating a flash report? Is it as simple as making a SOAP request with the REPORT_FORMAT set to "SWF"? There is no mention of this in the web services API manual.
  9. Variations of this have been posted here, however the old code had some bugs... this version works very well for us: http://pastebin.com/f4914d4db Here's a usage example (as a Rails controller action method): Code: def jasper_for_rails_example format = params[:format].downcase # e.g. 'PDF' mimetype = Mime::Type.lookup_by_extension(format) jasper = JasperClient.new(:username => 'foo', :«»password => 'bar') data = jasper.jasper.run_report('/foo/bar-report', format, 'start_date' => Time.parse(params['start_date']), 'end_date' => Time.parse(params['end_date']), 'some_other_param' => params['some_other_param'] ) send_data(data, :type => mimetype) end
  10. it looks like whatever it is you're parsing is not a SOAP response from JasperServer but HTML... are you sure you're fetching data from the right URL? And are you sure JasperServer is returning data correctly at that URL (maybe it's replying with a generic "500 Server Error" HTML page at the URL you're querying?)
  11. Okay nevermind... I should double-check before I post. Anyway here's a slightly different version of the above monkeypatch. This one should work against soap4r 1.5.8. Also, it adds the instance variable @env to the response object rather than returning an array with the env data. I think this might be a bit safer since it doesn't break the API. Code: module SOAP module RPC class Proxy include SOAP def call(name, *params) # name must be used only for lookup op_info = lookup_operation(name) mapping_opt = create_mapping_opt req_header = create_request_header req_body = SOAPBody.new( op_info.request_body(params, @mapping_registry, @literal_mapping_registry, mapping_opt) ) reqopt = create_encoding_opt( :«»soapaction => op_info.soapaction || @soapaction, :envelopenamespace => @options["soap.envelope.requestnamespace"], :default_encodingstyle => @default_encodingstyle || op_info.request_default_encodingstyle, :use_default_namespace => op_info.use_default_namespace || @use_default_namespace ) resopt = create_encoding_opt( :envelopenamespace => @options["soap.envelope.responsenamespace"], :default_encodingstyle => @default_encodingstyle || op_info.response_default_encodingstyle ) env = route(req_header, req_body, reqopt, resopt) if op_info.response_use.nil? return nil end raise EmptyResponseError unless env receive_headers(env.header) begin check_fault(env.body) rescue ::«»SOAP::FaultError => e op_info.raise_fault(e, @mapping_registry, @literal_mapping_registry) end if @return_response_as_xml return resopt[:response_as_xml] else response_obj = op_info.response_obj(env.body, @mapping_registry, @literal_mapping_registry, mapping_opt) response_obj.instance_variable_set(:@env, env) return response_obj end end end end end And to use it: Code:[code] @driver = SOAP::RPC::«»Driver.new(@url) @driver.options["protocol.http.basic_auth"] << [@url, @user, @pass] @driver.add_method('runReport','request') result = @driver.runReport(request.to_s) report = result.instance_variable_get(:@env).external_content['report'].data.content
  12. Okay nevermind... I should double-check before I post. Anyway here's a slightly different version of the above monkeypatch. This one should work against soap4r 1.5.8. Also, it adds the instance variable @env to the response object rather than returning an array with the env data. I think this might be a bit safer since it doesn't break the API. Code: module SOAP module RPC class Proxy include SOAP def call(name, *params) # name must be used only for lookup op_info = lookup_operation(name) mapping_opt = create_mapping_opt req_header = create_request_header req_body = SOAPBody.new( op_info.request_body(params, @mapping_registry, @literal_mapping_registry, mapping_opt) ) reqopt = create_encoding_opt( :«»soapaction => op_info.soapaction || @soapaction, :envelopenamespace => @options["soap.envelope.requestnamespace"], :default_encodingstyle => @default_encodingstyle || op_info.request_default_encodingstyle, :use_default_namespace => op_info.use_default_namespace || @use_default_namespace ) resopt = create_encoding_opt( :envelopenamespace => @options["soap.envelope.responsenamespace"], :default_encodingstyle => @default_encodingstyle || op_info.response_default_encodingstyle ) env = route(req_header, req_body, reqopt, resopt) if op_info.response_use.nil? return nil end raise EmptyResponseError unless env receive_headers(env.header) begin check_fault(env.body) rescue ::«»SOAP::FaultError => e op_info.raise_fault(e, @mapping_registry, @literal_mapping_registry) end if @return_response_as_xml return resopt[:response_as_xml] else response_obj = op_info.response_obj(env.body, @mapping_registry, @literal_mapping_registry, mapping_opt) response_obj.instance_variable_set(:@env, env) return response_obj end end end end end And to use it: Code:[code] @driver = SOAP::RPC::«»Driver.new(@url) @driver.options["protocol.http.basic_auth"] << [@url, @user, @pass] @driver.add_method('runReport','request') result = @driver.runReport(request.to_s) report = result.instance_variable_get(:@env).external_content['report'].data.content
  13. I can't get the above code to work... in fact those modifications to SOAP::RPC::Proxy don't make sense for soap4r -- at least not the latest version (1.5.8). What version of Ruby's SOAP libraries is this supposed to work against?
  14. Ok looks like adding the following to WEB-INF/classes/jasperreports.properties in the jasperserver.war did the trick: net.sf.jasperreports.query.executer.factory.xpath2=com.jaspersoft.jrx.query.JRXPathQueryExecuterFactory However I'm still getting no data filled on the remote server, although that might just be my custom data source service's fault...
  15. P.S. I tried adding the jasperreports-exetnsions-1.3.1.jar to the jasperserver.war, and I tried adding the custom property 'net.sf.jasperreports.query.executer.factory.xpath2' for my report to 'com.jaspersoft.jrx.query.JRXPathQueryExecuterFactory', but I'm still getting the error message. If it helps, here is the full stack trace from the server: Code: [#|2007-11-07T12:38:42.476-0500|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=29;_ThreadName=httpSSLWorkerThread-8080-4;|net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: No query executer factory class registered for xpath2 queries. Create a propery named net.sf.jasperreports.query.executer.factory.xpath2. at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:243) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214) at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.compileReport(EngineServiceImpl.java:752) at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$CacheableCompiledReports.getData(EngineServiceImpl.java:157) at com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryCache.saveData(HibernateRepositoryCache.java:179) at com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryCache.getCachedItem(HibernateRepositoryCache.java:125) at com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryCache.cache(HibernateRepositoryCache.java:71) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210) at $Proxy113.cache(Unknown Source) at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.getCompiledReport(EngineServiceImpl.java:762) at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.getJasperReport(EngineServiceImpl.java:589) at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.getMainJasperReport(EngineServiceImpl.java:785) at com.jaspersoft.jasperserver.ws.axis2.RepositoryHelper.convertParameterValues(RepositoryHelper.java:71) at com.jaspersoft.jasperserver.ws.axis2.ManagementService.runReport(ManagementService.java:1029) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) at javax.servlet.http.HttpServlet.service(HttpServlet.java:738) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at com.jaspersoft.jasperserver.war.common.UploadMultipartFilter.doFilter(UploadMultipartFilter.java:86) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274) at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274) at com.jaspersoft.jasperserver.api.metadata.user.service.impl.MetadataAuthenticationProcessingFilter.doFilter(MetadataAuthenticationProcessingFilter.java:136) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274) at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:181) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274) at com.jaspersoft.jasperserver.api.metadata.user.service.impl.JIPortletAuthenticationProcessingFilter.doFilter(JIPortletAuthenticationProcessingFilter.java:87) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:191) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274) at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148) at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:90) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at com.jaspersoft.jasperserver.war.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:70) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(S|#] [#|2007-11-07T12:38:42.476-0500|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=29;_ThreadName=httpSSLWorkerThread-8080-4;|tandardPipeline.java:577) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212) at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:361) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) Caused by: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: No query executer factory class registered for xpath2 queries. Create a propery named net.sf.jasperreports.query.executer.factory.xpath2. at org.apache.commons.digester.Digester.createSAXException(Digester.java:2919) at org.apache.commons.digester.Digester.createSAXException(Digester.java:2945) at org.apache.commons.digester.Digester.endElement(Digester.java:1133) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.impl.dtd.XMLDTDValidator.endNamespaceScope(Unknown Source) at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source) at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1647) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239) ... 95 more |#]
×
×
  • Create New...