2015-06-30 3 views
0

Некоторые сведения: это созданный WebLogic Service Services, созданный через Eclipse. Я считаю, что это использует клиентген за кулисами.SOAP Service Client не отправляет заголовки Mime для Basic Auth

Я пытаюсь сделать SOAP-вызов, который требует предварительной базовой аутентификации. Запрос отправляется, но настройки Mimeheaders, которые я устанавливаю, не собираются с ним. Получатель звонка сообщил мне, что сам запрос проходит, но никаких настроенных мною mimeheaders нет.

Сервисный вызов довольно прост.

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. Если я установил точку останова и посмотрю на заголовки mime, прежде чем он покинет метод handleMessage, я увижу, что они установлены.

Я могу запросить запрос и получить ответ в SoapUI. Я настроил упреждающий базовый auth, и он отлично работает. Когда я отправляю запрос через Java-клиент, я не получаю ответа и фактически получаю сообщение об ошибке, указывающее, что это неправильный тип содержимого. Я считаю, что эта ошибка относится к ответу на неисправность, поскольку я фактически не получаю ответ (не попадает в метод handleMessage() в обработчике), и я знаю, что запрос проходит через text/xml, что является тем, что ошибка просит.

Я не уверен, что это имеет какое-то отношение к «превентивному» требованию? Есть ли способ установить базовый auth, настроенный таким образом как превентивный?

Мысли? Любая помощь будет оценена по достоинству.

ответ

0

Базовый Auth выполняется на уровне HTTP, а не на слое SOAP, поэтому вам необходимо настроить базовую библиотеку HTTP. (Заголовки MIME не имеют к этому отношения)

Например, для CXF, посмотрите на этот вопрос HTTP basic authentication through CXF interceptor not working

Смежные вопросы