SOAP request using groovy

I created the following groovy test.groovy program to invoke the BI Publisher web service. I can get an answer to the soap. Can someone help me write soapresponse (Envelope.Body.runReportResponse.runReportReturn.reportBytes) to a pdf file.

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

--------------------- soap response program follows -------------- JVBERi0xLjQNCjUgMCBvYmoNCjw8DQovVHlwZSAvWE9iamVjdA0KL1N1YnR5cGUgL0ltYWdlDQovRmlsdGVyIC9EQ1REZWNvZGUNCi9MZW5ndGggNDM3NTINCi9XaWR0aCAxNDU3DQovSGVpZ2h0IDIyNA0KL0JpdHNQZXJDb21wb25lbnQgOA0KL0NvbG9yU3BhY2UgL0RldmljZVJHQg0KPj4NCnN0cmVhbQ0K / 9J / 4AAQSkZJRgABAQEBLAEsAAD / 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL / 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL / wAARCADgBbEDASIAAhEBAxEB / 8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL / 8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 + Tl5ufo6erx8vP09fb3 + PN6 / 8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL / 8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 + 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 + PusDkIFLDrkAcb06Lesg =.

+6
source share
1 answer

The returned Base64 string is encoded , with some characters at the end that appear to indicate the content-type ("application / pdf") and the original file name ("xmlp25327697.tmp"). If you disable everything starting with the โ€œapplicationโ€, you can then decode the string in bytes and write it to a file as follows:

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

Source: https://habr.com/ru/post/886266/


All Articles