代码之家  ›  专栏  ›  技术社区  ›  Mike Cialowicz

使用Python perserver调度报表

  •  6
  • Mike Cialowicz  · 技术社区  · 15 年前

    我能够在JasperServer上使用Python与SOAPpy和xml.dom文件迷你们。

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

    但是,我在服务器的“ReportScheduler”部分格式化请求时遇到了问题。我已经查阅了这里的文件( http://jasperforge.org/espdocs/docsbrowse.php?id=74&type=docs&group_id=112&fid=305

    下面是我尝试过的两个示例,它们都返回相同的错误:

    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>my@email.com</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>''')
    

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

    如有任何帮助/指导,我们将不胜感激。非常感谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Benson    15 年前

    lxml . 我对soap本身没有任何经验,所以我不能谈剩下的问题。

        2
  •  1
  •   Don Spaulding    15 年前

    在不了解Jasper的任何信息的情况下,我可以向您保证,将硬编码的SOAP请求替换为基于 the excellent suds library . 它将SOAP抽象化,并留给您非常干净的API访问。

    easy_install suds the docs