我正在尝试实现一些逻辑。使用 JAX-WS 客户端 (wsimport) 调用 WCF 服务后,我收到 HTTP 401
或 403
错误。
com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 401: Unauthorized
调用电话后如何获取响应 header ?我需要实现SOAPHandler.class
吗?
最佳答案
可以在客户端的传入响应中访问 HTTP header 。下面是演示如何执行此操作的 Handler
代码(请参阅 Access HTTP headers in a Handler 了解 GlassFish Metro ):
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;
}
}
关于java - JAX-WS 客户端获取响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854286/