从SOAPFault提取错误消息时发生java.lang.ClassCastException
我正在尝试提取Web服务的soapFault响应的错误代码和错误消息,但得到ClasscasrException: 以下是webservice的响应:从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/
<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
}