2009-05-15 7 views
6

Udało mi się dowiedzieć, jak uruchamiać raporty, pobierać pliki, katalogi list itp. Na serwerze JasperServer przy użyciu Pythona z SOAPpy i xml.dom minidom.Planowanie raportu JasperServer za pośrednictwem SOAP przy użyciu Pythona

Oto przykład wykonać żądania raportu, który działa:

repositoryURL = 'http://[email protected]: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> 
''') 

Jednak mam problemy z formatowaniem moje prośby odpowiednio do sekcji „ReportScheduler” serwera. Sprawdziłem dokumentację znajdującą się tutaj (http://jasperforge.org/espdocs/docsbrowse.php?id=74&type=docs&group_id=112&fid=305) i próbowałem modelować moje żądania po próbkach bez powodzenia (patrz strona 27).

Oto dwa przykłady, które próbowałem, które zwracają ten sam błąd:

schedulingURL = 'http://[email protected]: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>''') 

Każdy z tych wniosków spowodować błędy:

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'}> 

Każda pomoc/wskazówki będą mile widziane . Dziękuję Ci.

Odpowiedz

1

Miałem wiele złych doświadczeń z minidomem. Polecam użyć lxml. Nie miałem żadnego doświadczenia z mydłem, więc nie mogę porozmawiać z resztą problemu.

1

Nie wiedząc niczego na temat Jaspera, mogę zagwarantować, że lepiej będzie zastąpić zakodowane żądania SOAP prostym klientem w oparciu o numer the excellent suds library. Usuwa SOAP i pozostawia ci dostęp do API z piskliwym dostępem.

easy_install suds i the docs powinny wystarczyć.

Powiązane problemy