我遇到以下問題: 我正在使用SAAJ進行Web服務。我有一個以下soap故障的SOAPMessage:Web服務中的java/soapfault問題
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Server</faultcode>
<faultstring>java.lang.NullPointerException</faultstring>
<detail>
<ns2:exception xmlns:ns2="http://jax-ws.dev.java.net/" class="java.lang.NullPointerException" note="To disable this feature, set com.sun.xml.internal.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false">
<ns2:stackTrace>
<ns2:frame class="myClass" file="HandlerFile.java" line="261" method="invoke" /><ns2:frame class="myClass" file="HandlerFile.java" line="1" method="invoke" /><ns2:frame class="com.sun.xml.internal.ws.api.server.InstanceResolver$1" line="unknown" method="invokeProvider" /></ns2:stackTrace>
</ns2:exception>
</detail>
</S:Fault>
</S:Body>
</S:Envelope>
但是,如果我試圖獲取細節,我什麼也得不到!
我做如下:
String code = soapMsg.getSOAPBody().getFault().getFaultCode();
String faultString = soapMsg.getSOAPBody().getFault().getFaultString();
Detail detail = reply.getSOAPBody().getFault().getDetail();
if(detail == null)
System.out.println("No detail");
else
System.out.println("Detail value is "+detail.getNodeValue());
Iterator it = reply.getSOAPBody().getFault().getDetail().getDetailEntries();
StringBuilder details = new StringBuilder();
details.append("Detail:");
while(it.hasNext())
{
System.out.println("Has details");
DetailEntry temp = (DetailEntry) it.next();
System.out.println(temp.getTextContent());
System.out.println(temp.getValue());
details.append(temp.getValue());
details.append("-");
Iterator it2 = temp.getChildElements();
while(it2.hasNext())
{
Node t = (Node) it2.next();
System.out.println("Node value:"+t.getNodeValue());
}
}
System.out.println("Details:"+details.toString());
據印:
詳細值爲空
有更多的細節
詳情:空值
節點值:空
燦有人對此有所幫助?爲什麼我不能獲得SOAP錯誤的詳細信息?它包含在SOAP消息中?
更新:代碼和錯誤字符串打印正確。
I.e.
代碼:S:服務器
FaultString:顯示java.lang.NullPointerException
感謝
您的示例不顯示如果detail元素實際上在ns2:frame元素中具有任何文本內容。您是否嘗試過使用'getChildElements'或任何dom方法訪問DetailEntry的子節點? – 2010-10-27 11:59:42
@Jorn:我明白你的意思了。故障細節似乎報告服務器中的堆棧跟蹤(已更新後)。試圖使用getChildElements,我進入while循環但打印空值。在帖子中更新了代碼 – Cratylus 2010-10-27 12:33:19