Log Message
StackTraceElementConverter uses constructor for StackTraceElement instances in Java 5 and GEA.
Modified Paths
- branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementConverter.java
- branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory.java
- branches/v-1.4.x/xstream-distribution/src/content/changes.html
Added Paths
Diff
Modified: branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementConverter.java (2168 => 2169)
--- branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementConverter.java 2013-12-03 00:18:20 UTC (rev 2168)
+++ branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementConverter.java 2013-12-03 19:03:07 UTC (rev 2169)
@@ -16,6 +16,7 @@
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
+import com.thoughtworks.xstream.core.JVM;
/**
* Converter for StackTraceElement (the lines of a stack trace) - JDK 1.4+ only.
@@ -32,10 +33,36 @@
// (Note group 4 is optional is optional and only present if a colon char exists.)
private static final Pattern PATTERN = Pattern.compile("^(.+)\\.([^\\(]+)\\(([^:]*)(:(\\d+))?\\)$");
- private static final StackTraceElementFactory FACTORY = new StackTraceElementFactory();
+ private static final StackTraceElementFactory FACTORY;
+ static {
+ StackTraceElementFactory factory = null;
+ if (JVM.is15()) {
+ Class factoryType = JVM.loadClassForName(
+ "com.thoughtworks.xstream.converters.extended.StackTraceElementFactory15",
+ false);
+ try {
+ factory = (StackTraceElementFactory)factoryType.newInstance();
+ } catch (Exception e) {
+ // N/A
+ } catch (LinkageError e) {
+ // N/A
+ }
+ }
+ if (factory == null) {
+ factory = new StackTraceElementFactory();
+ }
+ try {
+ factory.unknownSourceElement("a", "b");
+ } catch (Exception e) {
+ factory = null;
+ } catch (NoClassDefFoundError e) { // GAE
+ factory = null;
+ }
+ FACTORY = factory;
+ }
public boolean canConvert(Class type) {
- return StackTraceElement.class.equals(type);
+ return StackTraceElement.class.equals(type) && FACTORY != null;
}
public String toString(Object obj) {
Modified: branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory.java (2168 => 2169)
--- branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory.java 2013-12-03 00:18:20 UTC (rev 2168)
+++ branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory.java 2013-12-03 19:03:07 UTC (rev 2169)
@@ -40,7 +40,7 @@
return create(declaringClass, methodName, fileName, lineNumber);
}
- private StackTraceElement create(String declaringClass, String methodName, String fileName, int lineNumber) {
+ protected StackTraceElement create(String declaringClass, String methodName, String fileName, int lineNumber) {
StackTraceElement result = new Throwable().getStackTrace()[0];
setField(result, "declaringClass", declaringClass);
setField(result, "methodName", methodName);
Added: branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory15.java (0 => 2169)
--- branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory15.java (rev 0)
+++ branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory15.java 2013-12-03 19:03:07 UTC (rev 2169)
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2013 XStream Committers.
+ * All rights reserved.
+ *
+ * Created on 03. December 2013 by Joerg Schaible
+ */
+package com.thoughtworks.xstream.converters.extended;
+
+/**
+ * @author Jörg Schaible
+ *
+ * @since upcoming
+ */
+class StackTraceElementFactory15 extends StackTraceElementFactory {
+
+ @Override
+ protected StackTraceElement create(final String declaringClass, final String methodName,
+ final String fileName, final int lineNumber) {
+ return new StackTraceElement(declaringClass, methodName, fileName, lineNumber);
+ }
+}
Property changes on: branches/v-1.4.x/xstream/src/java/com/thoughtworks/xstream/converters/extended/StackTraceElementFactory15.java
___________________________________________________________________
Added: svn:keywords
Added: svn:eol-style
Modified: branches/v-1.4.x/xstream-distribution/src/content/changes.html (2168 => 2169)
--- branches/v-1.4.x/xstream-distribution/src/content/changes.html 2013-12-03 00:18:20 UTC (rev 2168)
+++ branches/v-1.4.x/xstream-distribution/src/content/changes.html 2013-12-03 19:03:07 UTC (rev 2169)
@@ -58,6 +58,7 @@
<li>AbstractAttributedCharacterIteratorAttributeConverter (and therefore TextAttributeConverter) will check first if it
can access the possible constants of the type by reflection.</li>
<li>NoClassDefFoundError raised in GAE accessing the fields of restricted types by reflection will be handled.</li>
+ <li>StackTraceElementConverter uses constructor for StackTraceElement instances in Java 5 and GEA.</li>
</ul>
</li>
<li>JIRA:XSTR-739 and JIRA:XSTR-746: OrderRetainingMap fails if HashMap.putAll(Map) of Java Runtime is not
To unsubscribe from this list please visit:
