Как я могу получить ReaultReason от Soap Fault XML - PullRequest
0 голосов
/ 28 февраля 2020

Я использую обработчик soap. В сообщении о сбое дескриптора я не могу зафиксировать поле faultMessage и причину сбоя из xml. Как захватить эти два поля. Также есть ли способ захватить целые xml

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring xml:lang="en">Fault</faultstring>
         <detail>
            <ns2:FaultType xmlns:ns2="http://XXXXXXXXXXXX.com">
               <ns2:detail>
                  <ns2:applicationException>
                     **<ns2:faultReason>Application error</ns2:faultReason>
                     <ns2:faultMessage>Amount cant be processed </ns2:faultMessage>**
                  </ns2:applicationException>
               </ns2:detail>
            </ns2:FaultType>
         </detail>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Я пробовал, но не получаю желаемый код

@Override
public boolean handleFault(SOAPMessageContext context) {
    try {
    //  SOAPFault fault = context.getMessage().getSOAPBody().getFault();
        //System.out.println(fault.getFaultCode());

         SOAPMessage message = context.getMessage();
            SOAPBody body = message.getSOAPBody();
            SOAPFault fault = body.getFault();
            String code = fault.getFaultCode();
            String faultString = fault.getFaultString();
            Detail detail = fault.getDetail();
            if(detail!=null){
              Iterator<SOAPElement> iter = detail.getChildElements();
              //Getting first level of detail       
              HashMap<String, String> detailMap = new HashMap<String, String>();
              while(iter.hasNext()){
                SOAPElement element = iter.next();
                System.out.println("element.getLocalName(), element.getValue()"+element.getLocalName()+" "+ element.getValue());
                detailMap.put(element.getLocalName(), element.getValue());
              }
             //Logging or whatever
            }

        return true;


    }catch (SoapFaultException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SOAPException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    throw new UnsupportedOperationException("Not supported yet.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...