2016-04-05 1 views
-1

У меня есть клиент веб-службы SOAP, написанный с помощью Spring-WS. В ответ на запрос входа в систему веб-служба, к которой я подключаюсь, возвращает куки-файл сеанса в заголовке ответа HTTP с маркером в нем. Каждый последующий вызов службы требует, чтобы файл cookie с токеном. Как я могу получить cookie сеанса из ответа, а затем добавить его в заголовок HTTP при последующих вызовах службы?Получение http сеансов cookie в Spring-ws клиента веб-службы мыла

Чтобы обобщить то, что я прошу, как вы извлекаете и вводите файлы cookie с помощью Spring-WS.

Вот фрагмент кода похож на то, что я использую, чтобы позвонить в веб-службы:

MySessionLogon api = new MySessionLogon(); 
    api.setUsername(username); 
    api.setPassword(password); 

    MySessionLogonResponse response = (MySessionLogonResponse) getWebServiceTemplate() 
      .marshalSendAndReceive(
        "http://myserver/soapservice.asmx", 
        api, 
        new SoapActionCallback("http://www.myserver.com/MySession_Logon")); 

    return response; 

Я искал в интернете и читать много вещей, которые кажутся близко к тому, что мне нужно, но Я не видел хороший способ получить ценность куки, которые мне нужно использовать. Любая помощь будет оценена, спасибо заранее.

ответ

0

Вы проверили WebServiceMessageExtractor?

Вы можете сделать следующие

MySessionLogonResponse response = (MySessionLogonResponse) getWebServiceTemplate() 
      .sendAndReceive(
        "http://myserver/soapservice.asmx", 
        api, 
        new SoapActionCallback("http://www.myserver.com/MySession_Logon"), 
new WebServiceMessageExtractor<ResponseAndHeader>() { 
    public ResponseAndHeader extractData(WebServiceMessage message) throws IOException { 
    TransportContext context = TransportContextHolder.getTransportContext(); 
    HttpComponentsConnection con = (HttpComponentsConnection) context.getConnection(); 
    httpResponse httpResponse = con.getHttpResponse(); 
    //use the method getHeaders from to retrieve the data you want  
    }); 
+0

Спасибо за ответ VirtualTroll. Только примечание, marshalSendAndReceive не принимает четыре параметра, как показано в вашем ответе. Я предполагаю, что мне нужно будет использовать один из других методов SendAndReceive, предоставляемых WebServiceTemplate. – Woody

+0

Обновлен мой ответ. Могли ли вы решить проблему с помощью решения? – VirtualTroll

+0

Извините за долгую задержку, но я решил проблему, выбрав другой маршрут. Я реализовал решение, подобное http://stackoverflow.com/questions/25189129/spring-ws-client-set-cookie-for-authentication, с ценным вводом данных: и среди прочих. Еще раз спасибо за ваш вклад, хотя я не пошел так. @VirtualTroll – Woody

Смежные вопросы