pyreportjasper pyjasper jasper python soap jasper-reports

python - pyjasper - pyreportjasper



Programando un Informe de JasperServer a través de SOAP usando Python (2)

Pude averiguar cómo ejecutar informes, descargar archivos, listar carpetas, etc. en un JasperServer usando Python con SOAPpy y xml.dom minidom.

Aquí hay un ejemplo de solicitud de informe de ejecución, que funciona:

repositoryURL = ''http://user@pass:myjasperserver:8080/jasperserver/services/repository'' repositoryWSDL = repositoryURL + ''?wsdl'' server = SOAPProxy(repositoryURL, repositoryWSDL) print server._ns(repositoryWSDL).runReport('''''' <request operationName="runReport" locale="en"> <argument name="RUN_OUTPUT_FORMAT">PDF</argument> <resourceDescriptor name="" wsType="" uriString="/reports/baz"> <label>null</label> <parameter name="foo">bar</parameter> </resourceDescriptor> </request> '''''')

Sin embargo, tengo problemas para formatear correctamente mis solicitudes para la sección "ReportScheduler" del servidor. He consultado la documentación que se encuentra aquí ( http://jasperforge.org/espdocs/docsbrowse.php?id=74&type=docs&group_id=112&fid=305 ) y he intentado modelar mis solicitudes después de sus muestras sin suerte (consulte la página 27 )

Aquí hay dos ejemplos que he intentado, que ambos devuelven el mismo error:

schedulingURL = ''http://user@pass:myjasperserver:8080/jasperserver/services/ReportScheduler'' schedulingWSDL = schedulingURL + ''?wsdl'' server = SOAPProxy(schedulingURL, schedulingWSDL) # first request print server._ns(schedulingWSDL).scheduleJob('''''' <request operationName="scheduleJob" locale="en"> <job> <reportUnitURI>/reports/baz</reportUnitURI> <label>baz</label> <description>baz</description> <simpleTrigger> <startDate>2009-05-15T15:45:00.000Z</startDate> <occurenceCount>1</occurenceCount> </simpleTrigger> <baseOutputFilename>baz</baseOutputFilename> <outputFormats> <outputFormats>PDF</outputFormats> </outputFormats> <repositoryDestination> <folderURI>/reports_generated</folderURI> <sequentialFilenames>true</sequentialFilenames> <overwriteFiles>false</overwriteFiles> </repositoryDestination> <mailNotification> <toAddresses>[email protected]</toAddresses> <subject>test</subject> <messageText>test</messageText> <resultSendType>SEND_ATTACHMENT</resultSendType> </mailNotification> </job> </request>'''''') # second request (trying different format here) print server._ns(schedulingWSDL).scheduleJob('''''' <ns1:scheduleJob soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.jasperforge.org/jasperserver/ws"> <job xsi:type="ns1:Job"> <reportUnitURI xsi:type="xsd:string">/reports/baz</reportUnitURI> <username xsi:type="xsd:string" xsi:nil="true"/> <label xsi:type="xsd:string">baz</label> <description xsi:type="xsd:string">baz</description> <simpleTrigger xsi:type="ns1:JobSimpleTrigger"> <timezone xsi:type="xsd:string" xsi:nil="true"/> <startDate xsi:type="xsd:dateTime">2008-10-09T09:25:00.000Z</startDate> <endDate xsi:type="xsd:dateTime" xsi:nil="true"/> <occurrenceCount xsi:type="xsd:int">1</occurrenceCount> <recurrenceInterval xsi:type="xsd:int" xsi:nil="true"/> <recurrenceIntervalUnit xsi:type="ns1:IntervalUnit" xsi:nil="true"/> </simpleTrigger> <calendarTrigger xsi:type="ns1:JobCalendarTrigger" xsi:nil="true"/> <parameters soapenc:arrayType="ns1:JobParameter[4]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> </parameters> <baseOutputFilename xsi:type="xsd:string">test</baseOutputFilename> <outputFormats soapenc:arrayType="xsd:string[1]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <outputFormats xsi:type="xsd:string">PDF</outputFormats> </outputFormats> <outputLocale xsi:type="xsd:string" xsi:nil="true"/> <repositoryDestination xsi:type="ns1:JobRepositoryDestination"> <folderURI xsi:type="xsd:string">/reports_generated</folderURI> <sequentialFilenames xsi:type="xsd:boolean">false</sequentialFilenames> <overwriteFiles xsi:type="xsd:boolean">false</overwriteFiles> </repositoryDestination> <mailNotification xsi:type="ns1:JobMailNotification" xsi:nil="true"/> </job> </ns1:scheduleJob>'''''')

Cada una de estas solicitudes genera errores:

SOAPpy.Types.faultType: <Fault soapenv:Server.userException: org.xml.sax.SAXException: Bad types (class java.lang.String -> class com.jaspersoft.jasperserver.ws.scheduling.Job): <SOAPpy.Types.structType detail at 14743952>: {''hostname'': ''myhost''}>

Cualquier ayuda / guía sería apreciada. Gracias.


He tenido muchas malas experiencias con minidom. Te recomiendo que uses lxml . No he tenido ninguna experiencia con el jabón en sí mismo, así que no puedo hablar sobre el resto del problema.


Sin saber nada sobre Jasper, puedo garantizarle que lo hará mejor para reemplazar sus solicitudes SOAP codificadas con un cliente simple basado en la excelente biblioteca de jabonaduras . Se abstrae el SOAP y te deja con un acceso API muy limpio.

easy_install suds y los documentos deberían ser suficientes para easy_install suds .