Java SOAPFaultException详细信息为空

Java SOAPFaultException详细信息为空,java,soap,jax-ws,websphere-7,soapfault,Java,Soap,Jax Ws,Websphere 7,Soapfault,我正在使用JAX WS调用SOAP Web服务。在发生错误的情况下,我从客户端获得以下响应(我在跟踪日志中看到): 错误 错误 -97 产品A的价格必须高于30美元。 如您所见,有用的错误出现在“详细信息”节点中: <SOAP-ENV:Envelope> <SOAP-ENV:Body> <SOAP-ENV:Fault> <SOAP-ENV:detail> 在我的客户机中,我得到一个SOAPFaultE

我正在使用JAX WS调用SOAP Web服务。在发生错误的情况下,我从客户端获得以下响应(我在跟踪日志中看到):


错误
错误
-97
产品A的价格必须高于30美元。

如您所见,有用的错误出现在“详细信息”节点中:

<SOAP-ENV:Envelope>  
<SOAP-ENV:Body>  
    <SOAP-ENV:Fault>  
        <SOAP-ENV:detail>

在我的客户机中,我得到一个SOAPFaultException,它有一个SOAPFault对象。SOAPFault对象似乎缺少我在上面发布的节点。SOAPFaultException.getFault().getDetail()为空。异常为javax.xml.ws.soap.SOAPFaultException:错误。如何获取具有描述的详细信息节点


谢谢。

来自该服务的消息似乎不符合SOAP 1.1。在他们从“detail”节点中删除前缀“SOAP-ENV”后,它可以正常工作。

看看这个问题

}catch(SoapFaultClientException e){
日志错误(e);
SoapFaultDetail SoapFaultDetail=e.getSoapFault().getFaultDetail();
SoapFaultDetailElement detailElementChild=(SoapFaultDetailElement)soapFaultDetail.getDetailEntries().next();
Source detailSource=detailElementChild.getSource();
试一试{
对象详细信息=(JAXBElement)getWebServiceTemplate().getUnmarshaller().unmarshal(detailSource);
//抛出新的SoapFaultWithDetailException(细节);
}捕获(IOE1异常){
抛出新的IllegalArgumentException(“无法解组SOAP错误详细信息对象:+soapFaultDetail.getSource());
}
}
<SOAP-ENV:Envelope>  
<SOAP-ENV:Body>  
    <SOAP-ENV:Fault>  
        <SOAP-ENV:detail>
} catch (SoapFaultClientException e) {
    log.error(e);
    SoapFaultDetail soapFaultDetail = e.getSoapFault().getFaultDetail();
    SoapFaultDetailElement detailElementChild = (SoapFaultDetailElement) soapFaultDetail.getDetailEntries().next();
    Source detailSource = detailElementChild.getSource();

    try {
        Object detail = (JAXBElement<SearchResponse>) getWebServiceTemplate().getUnmarshaller().unmarshal(detailSource);
//                throw new SoapFaultWithDetailException(detail);

    } catch (IOException e1) {
        throw new IllegalArgumentException("cannot unmarshal SOAP fault detail object: " + soapFaultDetail.getSource());
    }

}