UnacceptableResultXINSCallException.java |
/* * $Id: UnacceptableResultXINSCallException.java,v 1.27 2012/02/28 18:10:54 agoubard Exp $ * * See the COPYRIGHT file for redistribution and use restrictions. */ package org.xins.client; import java.util.Map; import org.xins.common.MandatoryArgumentChecker; import org.xins.common.service.TargetDescriptor; import org.w3c.dom.Element; /** * Exception that indicates that an API call returned a result that was * considered unacceptable by the application layer. * * <p>Note that this exception is <em>not</em> thrown if the result is * invalid according to the XINS rules for a result XML document. Only if the * result is just invalid in relation to the applicable API specification this * exception is thrown. * * @version $Revision: 1.27 $ $Date: 2012/02/28 18:10:54 $ * @author <a href="mailto:ernst@ernstdehaan.com">Ernst de Haan</a> * * @since XINS 1.0.0 */ public class UnacceptableResultXINSCallException extends XINSCallException { /** * The result that is considered unacceptable. Never <code>null</code>. */ private final XINSCallResultData _result; /** * Constructs a new <code>UnacceptableCallResultException</code> using the * specified <code>XINSCallResult</code>. * * @param result * the {@link XINSCallResult} that is considered unacceptable, never * <code>null</code>. * * @param detail * a detailed description of why the result is considered unacceptable, * or <code>null</code> if such a description is not available. * * @param cause * the optional cause exception, or <code>null</code>. * * @throws IllegalArgumentException * if <code>result == null</code>. */ public UnacceptableResultXINSCallException(XINSCallResult result, String detail, Throwable cause) throws IllegalArgumentException { super("Unacceptable XINS call result", result, detail, cause); // Store the result _result = result; } /** * Constructs a new <code>UnacceptableCallResultException</code> using the * specified <code>AbstractCAPICallResult</code>. * * @param result * the {@link AbstractCAPICallResult} that is considered unacceptable, * never <code>null</code>. * * @param detail * a detailed description of why the result is considered unacceptable, * or <code>null</code> if such a description is not available. * * @param cause * the optional cause exception, or <code>null</code>. * * @throws IllegalArgumentException * if <code>result == null</code>. */ public UnacceptableResultXINSCallException(AbstractCAPICallResult result, String detail, Throwable cause) throws IllegalArgumentException { this(checkArguments(result).getXINSCallResult(), detail, cause); } /** * Constructs a new <code>UnacceptableResultXINSCallException</code> based * on a <code>XINSCallResultData</code> instance. * * @param request * the original request, cannot be <code>null</code>. * * @param target * descriptor for the target that was attempted to be called, cannot be * <code>null</code>. * * @param duration * the call duration in milliseconds, must be >= 0. * * @param resultData * the result data, cannot be <code>null</code>. * * @param detail * detail message, or <code>null</code>. * * @throws IllegalArgumentException * if <code>request == null * || target == null * || duration < 0 * || resultData == null * || resultData.{@link XINSCallResult#getErrorCode() getErrorCode()} == null</code>. */ UnacceptableResultXINSCallException(XINSCallRequest request, TargetDescriptor target, long duration, XINSCallResultData resultData, String detail) throws IllegalArgumentException { super("Unacceptable XINS call result", request, target, duration, detail, (Throwable) null); // Check additional precondition MandatoryArgumentChecker.check("resultData", resultData); // Store details _result = resultData; } /** * Checks the mandatory <code>result</code> argument for the constructor * that accepts an <code>AbstractCAPICallResult</code>. * * @param result * the argument for the constructor, cannot be <code>null</code>. * * @return * the argument <code>result</code>, guaranteed not <code>null</code>. * * @throws IllegalArgumentException * if <code>result == null</code>. */ private static AbstractCAPICallResult checkArguments(AbstractCAPICallResult result) throws IllegalArgumentException { MandatoryArgumentChecker.check("result", result); return result; } /** * Returns the error code. * * @return * the error code or <code>null</code> if the call was successful and no * error code was returned. */ public final String getErrorCode() { return _result.getErrorCode(); } /** * Gets all returned parameters. * * @return * a {@link Map} containing all parameters, or * <code>null</code> if there are none. */ public final Map<String, String> getParameters() { return _result.getParameters(); } /** * Gets the value of the specified returned parameter. * * @param name * the parameter name, not <code>null</code>. * * @return * the value of the parameter, or <code>null</code> if there is no values. * * @throws IllegalArgumentException * if <code>name == null</code>. */ public final String getParameter(String name) throws IllegalArgumentException { Map<String, String> p = getParameters(); if (p == null) { return null; } else { return p.get(name); } } /** * Returns the optional extra data. * * @return * the extra data as an {@link Element}, can be <code>null</code>; */ public final Element getDataElement() { return _result.getDataElement(); } }