[英]JAX-WS client get response headers
I'am trying to implement some logic. 我正在尝试实现一些逻辑。 I get a HTTP 401
or 403
error after making a call to a WCF service using JAX-WS client (wsimport). 使用JAX-WS客户端(wsimport)调用WCF服务后,出现HTTP 401
或403
错误。
com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 401: Unauthorized com.sun.xml.ws.client.ClientTransportException:服务器发送了HTTP状态码401:未经授权
How can I get the response headers after making a call? 拨打电话后如何获取响应头? Do I need to implement SOAPHandler.class
? 我需要实现SOAPHandler.class
吗?
HTTP headers can be accessed in a client side in an incoming response. 可以在客户端的传入响应中访问HTTP标头。 Here is Handler
code that demonstrates how to do this (See Access HTTP headers in a Handler for GlassFish Metro ): 这是演示如何执行此操作的Handler
程序代码(请参阅访问 GlassFish Metro 的处理程序中的HTTP标头 ):
public class ClientHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext context) {
if (!(Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
Map<String, List<String>> map = (Map<String, List<String>>)
context.get(MessageContext.HTTP_RESPONSE_HEADERS);
List<String> contentType = getHTTPHeader(map, "Content-Type");
if(contentType != null){
StringBuffer strBuf = new StringBuffer();
for(String type : contentType){
strBuf.append(type);
}
System.out.println("Content-Type:"+strBuf.toString());
}
}
return true;
}
private @Nullable
List<String> getHTTPHeader(Map<String, List<String>> headers, String header){
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
String name = entry.getKey();
if(name.equalsIgnoreCase(header))
return entry.getValue();
}
return null;
}
}
我找到解决方案:
(Integer) ((BindingProvider) servClient).getResponseContext().get(MessageContext.HTTP_RESPONSE_CODE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.