2015-12-22 13 views
-1

Я пытаюсь прочитать заголовок запроса SOAP от конечной весной так:чтения заголовка запроса SOAP с Spring

@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getCountryRequest") 
@ResponsePayload 
public GetCountryResponse getCountry(@RequestPayload GetCountryRequest request, MessageContext context) { 
    GetCountryResponse response = new GetCountryResponse(); 
    response.setCountry(countryRepository.findCountry(request.getName())); 

    return response; 
} 

Как вы можете видеть, у меня есть MessageContext в качестве параметра в методе Дескриптор конечная точка и я следующее, чтобы попытаться прочитать заголовок SOAP приходя из тэ запроса:

SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext.getRequest(); 
SoapHeader reqheader = soapRequest.getSoapHeader(); 
while (itr.hasNext()) { 
    SoapHeaderElement ele = itr.next(); 
} 

Видимо я получаю доступ к заголовку SOAP, но на данный момент I'm не совсем уверен, как читать значение любого элемента заголовка SOAP, я пробовал разные подходы без успеха.

Например, если следующий запрос SOAP исходит из SoapUI я хочу прочитать значение 123456 от NetworkCode элемента:

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <soapenv:Header> 
     <ns1:RequestHeader 
    soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
    soapenv:mustUnderstand="0" 
    xmlns:ns1="https://www.google.com/apis/ads/publisher/v201508"> 
     <ns1:networkCode>123456</ns1:networkCode> 
     <ns1:applicationName>DfpApi-Java-2.1.0-dfp_test</ns1:applicationName> 
    </ns1:RequestHeader> 
    </soapenv:Header> 
    <soapenv:Body> 
    <getAdUnitsByStatement xmlns="https://www.google.com/apis/ads/publisher/v201508"> 
     <filterStatement> 
     <query>WHERE parentId IS NULL LIMIT 500</query> 
     </filterStatement> 
    </getAdUnitsByStatement> 
    </soapenv:Body> 
</soapenv:Envelope> 

Заранее спасибо и наилучшие reards.

ответ

0

В SoapUI используя утверждение сценария, мы можем сделать это:

как ваш запрос сам содержит подробную информацию заголовка, мы можем прочитать любой элемент вашего запроса XML с помощью XPath.

Заменить TeststepName с вашей TestStepName.

Защиту groovyUtils = новый com.eviware.soapui.support.GroovyUtils (контекст)

держатель DEF = groovyUtils.getXmlHolder ("TeststepName # Запрос")

holder.namespaces [ "ns1"] = "https://www.google.com/apis/ads/publisher/v201508"

защиту у = держатель [ "(// NS1: NetworkCode)"]

log.info "Значение NetworkCode" + у

или

утверждают держатель [ "(// ns1: NetworkCode)"] == '123456'

+0

Привет, Спасибо за ваш ответ , Запросы могут быть отправлены от soapUI или любого другого клиента, вызывающего мою веб-службу, поэтому мне нужно будет прочитать заголовок мыла с конечной точки весной. Лучшие советы. – Rajesh

+0

Эта ссылка может помочь вам http://forum.spring.io/forum/spring-projects/web-services/21999-reading-soap-header-element-values-using-soapheaderelement – TestHat

0

пожалуйста попытаться получить все элементы заголовка из вашего запроса, как:

SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext.getRequest(); 

итератора HeaderList = soapRequest.getEnvelope(). GetHeader(). StudyAllHeaderElements();

в то время как (HeaderList.hasNext()) {

 SoapHeaderElement HeaderElements = HeaderList.next(); 
     println("\n"+HeaderElements.getName().getLocalPart()+ " - "+HeaderElements.getText()); 
    } 

}

0

Yoy вы можете QName для извлечения данных с помощью необходимого тега

SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext 
       .getRequest(); 
     SoapHeader reqheader = soapRequest.getSoapHeader(); 
     Iterator<SoapHeaderElement> itr = reqheader.examineAllHeaderElements(); 
     while (itr.hasNext()) { 
      SoapHeaderElement testedElement = itr.next(); 
      if (testedElement.getName() 
        .equals(new QName("https://www.google.com/apis/ads/publisher/v201508", "networkCode", "ns1"))) { 
       this.messageId = testedElement.getText(); 
       break; 
      } 
}