You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by tl...@apache.org on 2006/11/17 10:09:06 UTC
svn commit: r476086 -
/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java
Author: tli
Date: Fri Nov 17 01:09:05 2006
New Revision: 476086
URL: http://svn.apache.org/viewvc?view=rev&rev=476086
Log:
refactoring stack trace with xpath
Modified:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java?view=diff&rev=476086&r1=476085&r2=476086
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java Fri Nov 17 01:09:05 2006
@@ -20,17 +20,22 @@
import java.lang.reflect.Constructor;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.StringTokenizer;
import javax.xml.namespace.QName;
+import javax.xml.xpath.XPathConstants;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
+import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.helpers.XPathUtils;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
@@ -80,7 +85,7 @@
if (faultWanted != null) {
break;
}
- }
+ }
if (faultWanted == null) {
return;
}
@@ -103,39 +108,26 @@
}
private void setStackTrace(Fault fault, Message msg) {
- Element exDetail = (Element) DOMUtils.getChild(fault.getDetail(), Node.ELEMENT_NODE);
+ Map<String, String> ns = new HashMap<String, String>();
+ XPathUtils xu = new XPathUtils(ns);
+ String ss = (String) xu.getValue("//" + Fault.STACKTRACE + "/text()", fault.getDetail(),
+ XPathConstants.STRING);
List<StackTraceElement> stackTraceList = new ArrayList<StackTraceElement>();
- while (exDetail != null) {
- if (((Element) exDetail).getLocalName().equals(Fault.STACKTRACE)) {
- String content = exDetail.getTextContent();
- if (content != null) {
- StringTokenizer st = new StringTokenizer(content, "\n");
- while (st.hasMoreTokens()) {
- String oneLine = st.nextToken();
- StringTokenizer stInner = new StringTokenizer(oneLine, "!");
- StackTraceElement ste = new StackTraceElement(stInner.nextToken(), stInner
- .nextToken(), stInner.nextToken(), Integer.parseInt(stInner.nextToken()));
- stackTraceList.add(ste);
- }
- }
- if (stackTraceList.size() > 0) {
- StackTraceElement[] stackTraceElement = new StackTraceElement[stackTraceList.size()];
- Exception e = msg.getContent(Exception.class);
- e.setStackTrace(stackTraceList.toArray(stackTraceElement));
- }
- }
- Node next = exDetail.getNextSibling();
- while (!(next instanceof Element)) {
- if (next == null) {
- break;
- }
- next = next.getNextSibling();
+ if (StringUtils.isEmpty(ss)) {
+ StringTokenizer st = new StringTokenizer(ss, "\n");
+ while (st.hasMoreTokens()) {
+ String oneLine = st.nextToken();
+ StringTokenizer stInner = new StringTokenizer(oneLine, "!");
+ StackTraceElement ste = new StackTraceElement(stInner.nextToken(), stInner.nextToken(),
+ stInner.nextToken(), Integer.parseInt(stInner.nextToken()));
+ stackTraceList.add(ste);
}
- if (next instanceof Element) {
- exDetail = (Element) next;
- } else {
- exDetail = null;
+ if (stackTraceList.size() > 0) {
+ StackTraceElement[] stackTraceElement = new StackTraceElement[stackTraceList.size()];
+ Exception e = msg.getContent(Exception.class);
+ e.setStackTrace(stackTraceList.toArray(stackTraceElement));
}
}
+
}
}