2011-04-19 27 views
6

BI Publisher web hizmetini çağırmak için aşağıdaki groovy programın test.groovy oluşturdu. Sabun yanıtını alabiliyorum. Herkes bana pdf dosyasına soapresponse (Envelope.Body.runReportResponse.runReportReturn.reportBytes) yazmak için yardımcı olabilir. ProgramınSOAP groovy kullanarak istek

----------------------- test.groovy ------------------------------------ 

String username = "Administrator" 
String password = "Administrator" 
String attributeFormat = "pdf" 
String attributeLocale = "en-US" 
String reportAbsolutePath = "/WebserviceTest/eodnoticeofdormancy/eodnoticeofdormancy.xdo" 
String attributeTemplate = "Notice" 
String p_reportdate = "2011-04-08" 

def soapRequest = """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pub="http://xmlns.oracle.com/oxp/service/PublicReportService"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <pub:runReport> 
     <pub:reportRequest> 
      <pub:attributeFormat>${attributeFormat}</pub:attributeFormat> 
      <pub:attributeLocale>${attributeLocale}</pub:attributeLocale> 
      <pub:attributeTemplate>${attributeTemplate}</pub:attributeTemplate> 
      <pub:flattenXML>true</pub:flattenXML> 
      <pub:parameterNameValues> 
       <!--Zero or more repetitions:--> 
       <pub:item> 
        <pub:multiValuesAllowed>false</pub:multiValuesAllowed> 
        <pub:name>p_reportdate</pub:name> 
        <pub:values> 
        <pub:item>${p_reportdate}</pub:item> 
        </pub:values> 
       </pub:item> 
      </pub:parameterNameValues> 
      <pub:reportAbsolutePath>${reportAbsolutePath}</pub:reportAbsolutePath> 
     <pub:sizeOfDataChunkDownload>1024</pub:sizeOfDataChunkDownload> 
     </pub:reportRequest> 
     <pub:userID>Administrator</pub:userID> 
     <pub:password>Administrator</pub:password> 
     </pub:runReport> 
    </soapenv:Body> 
</soapenv:Envelope>""" 

try { 
    def soapUrl = new URL("http://localhost/xmlpserver/services/PublicReportService") 
    def connection = soapUrl.openConnection() 
    connection.setRequestMethod("POST") 
    connection.setRequestProperty("Content-Type" ,"text/html") 
    connection.setRequestProperty("SOAPAction", "") 
    connection.doOutput = true 

    Writer writer = new OutputStreamWriter(connection.outputStream) 
    writer.write(soapRequest) 
    writer.flush() 
    writer.close() 
    connection.connect() 


    def soapResponse = connection.content.text 
    def Envelope = new XmlSlurper().parseText(soapResponse) 

    println soapResponse 

    String reportBytes = Envelope.Body.runReportResponse.runReportReturn.reportBytes 
    String reportContentType = Envelope.Body.runReportResponse.runReportReturn.reportContentType 

} catch (Exception e) { 
    println "Error occurred" 
    println "--------------" 
    println e 
    e.printStackTrace(); 
} 

--------------------- sabun tepkisi aşağıdaki gibi ------------- - JVBERi0xLjQNCjUgMCBvYmoNCjw8DQovVHlwZSAvWE9iamVjdA0KL1N1YnR5cGUgL0ltYWdlDQovRmlsdGVyIC9EQ1REZWNvZGUNCi9MZW5ndGggNDM3NTINCi9XaWR0aCAxNDU3DQovSGVpZ2h0IDIyNA0KL0JpdHNQZXJDb21wb25lbnQgOA0KL0NvbG9yU3BhY2UgL0RldmljZVJHQg0KPj4NCnN0cmVhbQ0K/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADgBbEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0 RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 + Tl5ufo6erx8vP09fb3 + PN6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 + PN6/9oADAMBAAIRAxEAPwDkf + GgPHH/AD00/wD8Bv8A69H/AA0B44/56af/AOA3/wBevLaKAPUv + GgPHH/PTT // AAG/+ VR/w0B44/56af8A + A3/ANevLaKAPpP4PfFDxH428W3em6u1qbeKxedfJh2HcJI1HOemGNe2V8wfs4/8lD1D/sFSf + Dize geri geliyor jYq + n6ACiiigArH1/xRo/hm3EuqXixMw/dxL80kn + 6o5/HpXNeKfHhgubjStCeJrm3Xde3z4aKyTcAxx/Gw3D5RnHvyK8sfULq5jur7T5NqbSl5rmoHc0jlGRo4 + PusDkIFLDrkAcb06Lesg == uygulama/pdfxmlp25327697.tmp

cevap

4

olduğunu, sonunda content-type ("application/pdf") ve orijinal dosya adını ("xmlp25327697.tmp") belirten görünen bazı karakterler ile. "Uygulama" ile başlayan her şeyi kesip çıkarırsanız, dizeyi Dize olarak çözebilir ve aşağıdaki gibi bir dosyaya yazabilirsiniz:

byte[] decoded = reportBytes.decodeBase64() 
def myFile = new File('something.pdf') 
myFile.bytes = decoded 
+0

Teşekkür ederim Matt, beklendiği gibi çalışıyor. –