cucumber.deps.com.thoughtworks.xstream.converters.ConversionException Maven / Gradle / Ivy
/*
* Copyright (C) 2003, 2004, 2005 Joe Walnes.
* Copyright (C) 2006, 2007, 2008, 2009, 2011 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
* style license a copy of which has been included with this distribution in
* the LICENSE.txt file.
*
* Created on 26. September 2003 by Joe Walnes
*/
package com.thoughtworks.xstream.converters;
import com.thoughtworks.xstream.XStreamException;
import com.thoughtworks.xstream.core.util.OrderRetainingMap;
import java.util.Iterator;
import java.util.Map;
/**
* Thrown by {@link Converter} implementations when they cannot convert an object
* to/from textual data.
*
* When this exception is thrown it can be passed around to things that accept an
* {@link ErrorWriter}, allowing them to add diagnostics to the stack trace.
*
* @author Joe Walnes
* @author Jörg Schaible
*
* @see ErrorWriter
*/
public class ConversionException extends XStreamException implements ErrorWriter {
private static final String SEPARATOR = "\n-------------------------------";
private Map stuff = new OrderRetainingMap();
public ConversionException(String msg, Throwable cause) {
super(msg, cause);
if (msg != null) {
add("message", msg);
}
if (cause != null) {
add("cause-exception", cause.getClass().getName());
add("cause-message", cause instanceof ConversionException ? ((ConversionException)cause).getShortMessage() : cause.getMessage());
}
}
public ConversionException(String msg) {
super(msg);
}
public ConversionException(Throwable cause) {
this(cause.getMessage(), cause);
}
public String get(String errorKey) {
return (String) stuff.get(errorKey);
}
public void add(String name, String information) {
String key = name;
int i = 0;
while (stuff.containsKey(key)) {
String value = (String)stuff.get(key);
if (information.equals(value))
return;
key = name + "[" + ++i +"]";
}
stuff.put(key, information);
}
public void set(String name, String information) {
String key = name;
int i = 0;
stuff.put(key, information); // keep order
while (stuff.containsKey(key)) {
if (i != 0) {
stuff.remove(key);
}
key = name + "[" + ++i +"]";
}
}
public Iterator keys() {
return stuff.keySet().iterator();
}
public String getMessage() {
StringBuffer result = new StringBuffer();
if (super.getMessage() != null) {
result.append(super.getMessage());
}
if (!result.toString().endsWith(SEPARATOR)) {
result.append("\n---- Debugging information ----");
}
for (Iterator iterator = keys(); iterator.hasNext();) {
String k = (String) iterator.next();
String v = get(k);
result.append('\n').append(k);
result.append(" ".substring(Math.min(20, k.length())));
result.append(": ").append(v);
}
result.append(SEPARATOR);
return result.toString();
}
public String getShortMessage() {
return super.getMessage();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy