Веб-сервис Java SOAP, возвращающий DataHandler - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь использовать основанный на SOAP WS, который возвращает Java DataHandler. Я использую Grails и Apache httpclient.PostMethod. Если я использую инструмент мыла, я получаю файл в виде вложения (см. Img - Кстати, у soapclient.com отличный инструмент).

enter image description here

В моем контроллере 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? Спасибо, я действительно ценю любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 10 февраля 2012

Я изменил requestHeader, и он заработал. Я получил файл, обслуживаемый службой SOAP.

method.addRequestHeader ( "Content-Type", "Текст / XML") method.addRequestHeader ( "Принять", "Текст / XML, приложения / XML; д = 0,9") method.setRequestEntity (new StringRequestEntity (payload))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...