2013-07-24 2 views
1

У меня есть такая строка:Получить значение из ответа SOAP

SOAPMessage soapResponse = soapConnection.call(message, url);

и ответ выглядят:

HTTP/1.1 200 OK 
Content-Type: text/xml;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Wed, 24 Jul 2013 07:44:39 GMT 
Server: Apache-Coyote/1.1 

<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> 
    <TransactionID soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="1" xmlns="http://somelink"></TransactionID> 
</soapenv:Header> 
<soapenv:Body> 
    <soap-env:Fault xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap-env:faultcode>Server</soap-env:faultcode> 
    <soap-env:faultstring>Server Error</soap-env:faultstring> 
    <soap-env:Detail> 
    <soap-env:Status> 
    <soap-env:StatusCode>3000</soap-env:StatusCode> 
    <soap-env:StatusText>Server Error</soap-env:StatusText> 
    <soap-env:Details></soap-env:Details> 
    </soap-env:Status> 
    </soap-env:Detail> 
    </soap-env:Fault> 
</soapenv:Body> 
</soapenv:Envelope> 

, как я могу получить StatusCode (3000) в строках от такого ответа мыла? я пытался soapResponse.getSOAPBody()...., но все, что я мог бы получить было: статус

EDIT:

так я сделал:

Detail detail = soapResponse.getSOAPPart().getEnvelope().getBody().getFault().getDetail(); 
Iterator detailEntries = detail.getDetailEntries(); 
while (detailEntries.hasNext()) { 
    SOAPBodyElement bodyElement = (SOAPBodyElement) detailEntries.next(); 
    Iterator val = bodyElement.getChildElements(); 
    while (val.hasNext()) { 
     SOAPBodyElement bodyElement2 = (SOAPBodyElement) val.next(); 
     String val2 = bodyElement2.getValue(); 
     logger.debug("The Value is:" + val2); 
    } 

но получил класс произнесения исключение } Edit2: Решение:

soapResponse.getSOAPPart().getEnvelope().getBody().getFault().getDetail().getTextContent().trim().substring(0, 4)); 
+0

Какая строка вызывает «ClassCastException»? Если это первая строка, разделите ее на отдельные операторы, чтобы отслеживать, где она находится. – mthmulders

ответ

2
+0

Обратите внимание, что вам не нужно вводить 'DetailEntry' в' SOAPElement' - методы из 'SOAPElement' автоматически доступны вам. – mthmulders

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