SOAP запрос с использованием groovy - PullRequest
6 голосов
/ 20 апреля 2011

Я создал следующую отличную программу test.groovy для вызова веб-службы BI Publisher.Я могу получить мыльный ответ.Может кто-нибудь, пожалуйста, помогите мне написать мыльный ответ (Envelope.Body.runReportResponse.runReportReturn.reportBytes) в файл PDF.

----------------------- 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();
}

--------------------- мыльный ответ программы следующим образом -------------- JVBERi0xLjQNCjUgMCBvYmoNCjw8DQovVHlwZSAvWE9iamVjdA0KL1N1YnR5cGUgL0ltYWdlDQovRmlsdGVyIC9EQ1REZWNvZGUNCi9MZW5ndGggNDM3NTINCi9XaWR0aCAxNDU3DQovSGVpZ2h0IDIyNA0KL0JpdHNQZXJDb21wb25lbnQgOA0KL0NvbG9yU3BhY2UgL0RldmljZVJHQg0KPj4NCnN0cmVhbQ0K / 9J / 4AAQSkZJRgABAQEBLAEsAAD / 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL / 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL / wAARCADgBbEDASIAAhEBAxEB / 8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL / 8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 + Tl5ufo6erx8vP09fb3 + PN6 / 8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL / 8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 + PN6 / 9oADAMBAAIRAxEAPwDkf + GgPHH / AD00 / wD8Bv8A69H / AA0B44 / 56af / AOA3 / wBevLaKAPUv + GgPHH / PTT // AAG / + VR / w0B44 / 56af8A + A3 / ANevLaKAPpP4PfFDxH428W3em6u1qbeKxedfJh2HcJI1HOemGNe2V8wfs4 / 8lD1D / SFSF + jYq + n6ACiiigArH1 / xRo / hm3EuqXixMw /dxL80kn + 6o5 / HpXNeKfHhgubjStCeJrm3Xde3z4aKyTcAxx / Gw3D5RnHvyK8sfULq5jur7T5NqbSl5rmoHc0jlGRo4 + PusDkIFLDrkAcb0632567 * 100 * px = 10000 * p5

1 Ответ

4 голосов
/ 20 апреля 2011

Возвращается строка Base64 в кодировке , с некоторыми символами в конце, которые, по-видимому, указывают тип содержимого ("application / pdf") и исходное имя файла ( "xmlp25327697.tmp"). Если вы удалите все, начиная с «приложения», вы можете декодировать строку в байты и записать ее в файл, подобный следующему:

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