简体   繁体   English

JAX-WS客户端获取响应头

[英]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 401403错误。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM