从SOAPFault提取错误消息时发生java.lang.ClassCastException

从SOAPFault提取错误消息时发生java.lang.ClassCastException,java,web-services,soap,Java,Web Services,Soap,我正在尝试提取Web服务的soapFault响应的错误代码和错误消息,但得到ClasscasrException: 以下是webservice的响应: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header xmlns:com="http://com.amdocs.bss.bsl/" xmlns:soap="http://www.w3.org/

我正在尝试提取Web服务的soapFault响应的错误代码和错误消息,但得到ClasscasrException:

以下是webservice的响应:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header xmlns:com="http://com.amdocs.bss.bsl/" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
      <bsl:BSLResponseHeader xmlns:bsl="http://com.amdocs.bss.bsl/">
         <ResponseTimestamp>2015-02-24T11:34:03.419+01:00</ResponseTimestamp>
         <MessageID>1234</MessageID>
         <BSLServiceOperation>getTariffAndAddOns getTariffAndAddOns</BSLServiceOperation>
      </bsl:BSLResponseHeader>
   </soapenv:Header>
   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>soapenv:Server</faultcode>
         <faultstring>BSL exception</faultstring>
         <detail xmlns:com="http://com.amdocs.bss.bsl/" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
            <bsl:error xmlns:bsl="http://com.amdocs.bss.bsl/">
             <errorCode>BSL-14004</errorCode>
          <errorMessage>OMS login failure: Problem in OMS UAMS login - 
Nested Exception/Error:
java.net.ConnectException: Tried all: '1' addresses, but could not connect over HTTP to server: '195.233.102.177', port: '40123'
</errorMessage>
          <detail>
            <ImplRetrieveCustomerAssignedProductRestOutput>
              <transactionId>1424678882788</transactionId>
              <?xml-multiple errorInfo?>
              <errorInfo>
                <errorCode>14004</errorCode>
                <errorMessage>OMS login failure: Problem in OMS UAMS login - 
Nested Exception/Error:
java.net.ConnectException: Tried all: '1' addresses, but could not connect over HTTP to server: '195.233.102.177', port: '40123'
</errorMessage>
                <sourceSystem>MCSS</sourceSystem>
              </errorInfo>
            </ImplRetrieveCustomerAssignedProductRestOutput>
            <httpstatusCode>500</httpstatusCode>
          </detail>
            </bsl:error>
         </detail>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>
以下是输出:

错误代码:BSL-14004 错误消息:OMS登录失败:OMS UAMS登录出现问题- 嵌套异常/错误: java.net.ConnectException:尝试了所有地址:“1”,但无法通过HTTP连接到服务器:“195.233.102.177”,端口:“40123”

线程主线程java.lang.ClassCastException中的异常:com.sun.xml.internal.messaging.saaj.soap.impl.textinpl 在msisdn.gettariffsandaddonsmissdn.java:155 在msisdn.mainsdn.java:181


最终SOAPElement SOAPElement=SOAPElement子元素siter.next;这是第155行


从错误位置看,前两个条件执行成功,但第三次执行时抛出异常。有人能建议我应该做些什么来避免这种情况吗?

您确定前两次您收到的是TextImpl吗。显然,它失败了,因为它试图将cast TextImpl类型转换为SoapElement。如果您只需要SoapElement类型,那么您可以检查

if (childElementIter.next() instanceof SoapElement) 
{ 
    // business logic 
}

哪一行是第155行?最后一行SOAPElement SOAPElement=SOAPElement子元素siter.next;是第155行那么您的问题是您试图将TextImpl强制转换为SOAPElement,而TextImpl不扩展或实现SOAPElement。那么它在前两个输出中也应该给出错误,但在第三次运行循环时给出错误。当我试图在else if之后的循环中插入另一个空白else时。它工作正常。是的,我也试过了,它仍然会出现问题,但在这种情况下,它只运行一次来打印错误消息,而不是错误代码。下面是这次的输出。kk errorMessage:在线程主线程java.lang.ClassCastException:com.sun.xml.internal.messaging.saaj.soap.impl.TextImpl的msisdn.getTariffsAndAddOnsmsisdn.java:155的msisdn.mainsmsisdn.java:182中未找到客户ID异常
if (childElementIter.next() instanceof SoapElement) 
{ 
    // business logic 
}