Я пытаюсь использовать основанный на SOAP WS, который возвращает Java DataHandler. Я использую Grails и Apache httpclient.PostMethod. Если я использую инструмент мыла, я получаю файл в виде вложения (см. Img - Кстати, у soapclient.com отличный инструмент).
В моем контроллере Grails:
class connectToSoap {
def getFile = {
def payload = """
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org
<userLogicalId>${params.userLogicalId}</userLogicalId>
<clientLogicalId>${params.clientLogicalId}</clientLogicalId>
</mns1:getFile></SOAP-ENV:Body>
</SOAP-ENV:Envelope> // Summarized payload
"""
def method = new PostMethod(url)
method.setRequestHeader("Content-disposition", "attachment;filename=antocha.zip")
method.addRequestHeader("Content-Type","application/octet-stream")
method.setRequestEntity(new StringRequestEntity(payload))
def client = new HttpClient()
def statusCode = client.executeMethod(method)
InputStream inputStream = method.getResponseBodyAsStream()
OutputStream out = new FileOutputStream(new File("c:\\var\\nfile.zip"))
byte[] bytes = new byte[1024]
while ((read = inputStream.read(bytes)) != -1) {
out.write(bytes, 0, read)
}
inputStream.close();
out.flush();
out.close();
method.releaseConnection()
}
Когда я запускаю это, я получаю исключение с inputStream.read (groovy.lang.MissingPropertyException: такого свойства нет). Я предполагаю, что обработка файла вложения должна обрабатываться по-другому?
Может ли кто-нибудь дать мне пример кода с использованием httpclient.PostMethod для выполнения вызовов SOAP, которые возвращают DataHandler? Спасибо, я действительно ценю любую помощь, которую вы можете оказать.