【发布时间】:2015-06-30 11:35:36
【问题描述】:
一些背景:这是一个Weblogic Web Services创建的服务客户端通过Eclipse创建的。我相信这会在幕后使用 clientgen。
我正在尝试进行需要抢先式基本身份验证的 SOAP 调用。请求正在发送,但我设置的 Mimeheaders 不适用。电话的接收者通知我请求本身正在通过,但我设置的任何 mimeheader 都没有。
服务调用相当简单。
DescriptionService service = new DescriptionService(wsdlLocation, new QName("urn:descriptionService.service.company.com", "DescriptionService"));
service.setHandlerResolver(new HandlerResolver() {
@SuppressWarnings("rawtypes")
@Override
public List<Handler> getHandlerChain(final PortInfo portInfo) {
final List<Handler> handlerList = new ArrayList<Handler>();
handlerList.add(new SOAPDescriptionServiceHeaderHandler());
return handlerList;
}
});
DescriptionServicePortType portType = service.getDescriptionServicePort();
DescriptionRequest request = new DescriptionRequest();
request.setId(id);
DescriptionResponse description = portType.describe(request);
处理程序是我设置 Mimeheaders 的地方:
@Override
public boolean handleMessage(final SOAPMessageContext context) {
final Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
final SOAPMessage message = context.getMessage();
if (outboundProperty.booleanValue()) {
try {
MimeHeaders mimeheaders = message.getMimeHeaders();
String encodedAuth = Base64.encode(new String("un:pw").getBytes());
mimeheaders.addHeader("Authorization", "Basic " + encodedAuth);
this.logMessage(message, outboundProperty.booleanValue(), false);
} catch (final Exception e) {
// Log Error
}
} else {
this.logMessage(message, outboundProperty.booleanValue(), false);
}
return true;
}
它确实命中了这个处理程序并设置了 mimeheaders。如果我在离开 handleMessage 方法之前设置断点并查看 mime 标头,我可以看到它们已设置。
我可以调用请求并在 SoapUI 中获得响应。我设置了抢先式基本身份验证,它工作正常。当我通过 Java 客户端发送请求时,我没有收到任何响应,实际上收到一个错误,指出它的内容类型不正确。我相信这个错误是指错误响应,因为我实际上没有得到响应(也没有点击处理程序中的 handleMessage() 方法)并且我知道请求正在通过 text/xml 这就是错误要求。
我不确定它是否与“抢先”要求有关?有没有办法将这种方式设置的基本身份验证设置为抢占式?
想法? 任何帮助将不胜感激。
【问题讨论】:
标签: java web-services soap basic-authentication