我將web服務客戶端從jdk1.6 jax-ws(v1?舊的 - 2005)遷移到jdk1.7 jax- ws 2.2.10。 舊的功能,但我有一個新的問題: 該服務(來自另一個社會,PHP服務器)迴應我:http 406錯誤,不能接受。無法修改SOAP WebService客戶端中的http accept頭 - JAX-WS 2.2.10 - JDK1.7
的accept頭我送的是:
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
與舊版本,我有:
Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-type: text/xml;charset="utf-8"
於是,我就修改HTTP頭像這樣(在新處理器中我結合處理程序鏈):
在我的客戶:
javax.xml.ws.Binding binding = ((BindingProvider) ServiceXXX).getBinding();
List<Handler> hchain = binding.getHandlerChain();
if (hchain == null) {hchain = new ArrayList<Handler>();}
hchain.add(new HTTPUserAgentHandler());
binding.setHandlerChain(hchain);
在我的新的處理程序:
Map<String, List<String>> headers = (Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS);
if (null == headers) {headers = new HashMap<String, List<String>>();}
headers.put("Accept", Arrays.asList("text/xml", "multipart/related", "*/*"));
context.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
我的HTTP標頭現在是正確的,但在HttpTransportPipe類,它的覆蓋:
reqHeaders.put("Content-Type", Collections.singletonList(ct.getContentType()));
if (ct.getAcceptHeader() != null) {
reqHeaders.put("Accept", Collections.singletonList(ct.getAcceptHeader()));
}
if (binding instanceof SOAPBinding) {
writeSOAPAction(reqHeaders, ct.getSOAPActionHeader());
}
服務器,顯然1.1,需要我送與"*/*"
的接受任何想法我怎麼能做到這一點?