2013-12-09 93 views
1

如何將java.util.Collections$UnmodifiableRandomAccessList轉換爲Collections.singletonList? 爲了在兩個服務之間存儲會話,我找到了這個,但我無法弄清楚它們之間的一個步驟。 首先得到的cookie信息,我需要設置:

Map<String, Collections> headerInfo = (Map<String, Collections>) 
((BindingProvider) port).getResponseContext() 
         .get(MessageContext.HTTP_RESPONSE_HEADERS); 

現在,我可以得到的cookie信息,我需要; 如果我做了

System.out.println(headerInfo.get("Set-Cookie")); 

我得到這樣的

Set-Cookie=[PHPSESSID=rpsnc2g7o4ltbr6l9qus177p14; path=/]; 

現在我只需要做到這一點:

((BindingProvider) port2).getRequestContext() 
    .put(MessageContext.HTTP_REQUEST_HEADERS, 
     Collections.singletonMap("Cookie", Collections.singletonList(cookieValue))); 

但我無法弄清楚如何從 得到headerInfo.get("Set-Cookie")發給:cookieValue

這是我發現我的問題的解決方案的Q中的第一部分的問題:
JAX-WS client: maintain session/cookies across multiple services
(這或許可以解釋我的問題有點太)

+1

爲什麼您需要進行轉換,而不是隻保留原始列表? –

+0

如果我試圖使用原始列表: ((BindingProvider)customer).getRequestContext()。put(MessageContext.HTTP_REQUEST_HEADERS,Collections.singletonMap(「Cookie」,headerInfo.get(「Set-Cookie」))); 時拋出此異常: java.util.Collections中的$ UnmodifiableRandomAccessList不能轉換到java.util.Collections中 – Steffen

+0

更新: 你說得對,我並不需要轉換,恰到好處的類型轉換。謝謝! – Steffen

回答

2

的解決方案是通過轉換成正確的類/接口使用原始列表:代替

List<String> 

Collections 

工作。

Map<String, List<String>> headers = (Map<String, List<String>>)((BindingProvider) authPort).getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS); 
List<String> setCookie = (List<String>) headers.get("Set-Cookie"); 
((BindingProvider) servicePort).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,Collections.singletonMap("Cookie", setCookie)); 
相關問題