package org.marketcetera.util.ws.wrappers;
import java.io.PrintStream;
import java.io.PrintWriter;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.ObjectUtils;
import org.marketcetera.util.misc.ClassVersion;
/**
* A partial, client-side representation of a server exception, when
* the full exception cannot be reconstructed.
*
* @author tlerios@marketcetera.com
* @since 1.0.0
* @version $Id: RemoteProxyException.java 16154 2012-07-14 16:34:05Z colin $
*/
/* $License$ */
@ClassVersion("$Id: RemoteProxyException.java 16154 2012-07-14 16:34:05Z colin $")
public class RemoteProxyException
extends Exception
{
// CLASS DATA.
private static final long serialVersionUID=1L;
// INSTANCE DATA.
private final String[] mTraceCapture;
private final String mServerString;
private final String mServerName;
// CONSTRUCTORS.
/**
* Creates a new client-side representation of a server exception,
* whose marshalled information is given.
*
* @param message The server-localized message, which may be null.
* @param traceCapture The stack trace capture, which may be null.
* @param serverString The server string representation, which may
* be null.
* @param serverName The server class name, which may be null.
*/
public RemoteProxyException
(String message,
String[] traceCapture,
String serverString,
String serverName)
{
super(message);
mTraceCapture=traceCapture;
mServerString=serverString;
mServerName=serverName;
}
// INSTANCE METHODS.
/**
* Returns the receiver's stack trace capture.
*
* @return The capture, which may be null.
*/
public String[] getTraceCapture()
{
return mTraceCapture;
}
/**
* Returns the receiver's server class name.
*
* @return The name, which may be null.
*/
public String getServerName()
{
return mServerName;
}
// Exception.
@Override
public void printStackTrace()
{
if (getTraceCapture()==null) {
return;
}
for (String frame:getTraceCapture()) {
System.err.println(frame);
}
}
@Override
public void printStackTrace
(PrintStream s)
{
if (getTraceCapture()==null) {
return;
}
for (String frame:getTraceCapture()) {
s.println(frame);
}
}
@Override
public void printStackTrace
(PrintWriter s)
{
if (getTraceCapture()==null) {
return;
}
for (String frame:getTraceCapture()) {
s.println(frame);
}
}
@Override
public StackTraceElement[] getStackTrace()
{
return null;
}
@Override
public String toString()
{
return mServerString;
}
@Override
public int hashCode()
{
return (ObjectUtils.hashCode(getMessage())+
ArrayUtils.hashCode(getTraceCapture())+
ObjectUtils.hashCode(toString())+
ObjectUtils.hashCode(getServerName()));
}
@Override
public boolean equals
(Object other)
{
if (this==other) {
return true;
}
if ((other==null) || !getClass().equals(other.getClass())) {
return false;
}
RemoteProxyException o=(RemoteProxyException)other;
return (ObjectUtils.equals(getMessage(),o.getMessage()) &&
ArrayUtils.isEquals(getTraceCapture(),o.getTraceCapture()) &&
ObjectUtils.equals(toString(),o.toString()) &&
ObjectUtils.equals(getServerName(),o.getServerName()));
}
}