JAX-WS client: maintain session/cookies across multiple services

前端 未结 2 2059
渐次进展
渐次进展 2020-12-05 16:08

I\'m using Netbeans to automatically create webservice clients based off WSDL files. This works well, except the webservices I\'m using require that I pass in a custom cooki

相关标签:
2条回答
  • 2020-12-05 16:35

    I've found a solution.

    You can get response headers using this after you've made the call:

    ((BindingProvider)port).getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS);
    

    Find the Set-Cookie header and store its value.

    Then before your next request (in any webservice) you can set the Cookie header:

    ((BindingProvider)port).getRequestContext().put(
                MessageContext.HTTP_REQUEST_HEADERS,
                    Collections.singletonMap("Cookie", Collections.singletonList(cookieValue)
                )
            );
    
    0 讨论(0)
  • 2020-12-05 16:45

    Just commenting because solution above didn't work for me. I got UnsupportedOperationException. I believe issue was caused because singletonMap doesn't allow changes. xml headers were also needed, so I set those first.

    Map<String, List<String>> headers= CastUtils.cast((Map)port.getRequestContext().get("javax.xml.ws.http.request.headers"));
    if (headers == null) {
        headers = new HashMap<String, List<String>>();
        port.getRequestContext().put("javax.xml.ws.http.request.headers", headers);
    }
    
    headers.put("Cookie", Collections.singletonList(cookieValue));
    ((BindingProvider)port).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, headers); 
    
    0 讨论(0)
提交回复
热议问题