/* * * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ package com.sun.j2me.payment; /** * Thrown when validating MIDlet's payment information or when downloading and * validating a payment update file (JPP). * * @version 1.2 */ public class PaymentException extends Exception { /** * The payment information has an unsupported version. The * <code>getParam()</code> method returns the number of this version. */ public static final int UNSUPPORTED_PAYMENT_INFO = 0; /** * The payment information doesn't contain a mandatory attribute. The * <code>getParam()</code> method returns the name of the attribute. */ public static final int MISSING_MANDATORY_ATTRIBUTE = 1; /** * The payment information contains an attribute with an invalid value. The * <code>getParam()</code> method returns the name of the attribute. */ public static final int INVALID_ATTRIBUTE_VALUE = 2; /** * The device doesn't support any of the adapters listed in the payment * information file. The <code>getParam()</code> method returns the name of * the attribute which contains the adapter names. */ public static final int UNSUPPORTED_ADAPTERS = 3; /** * The device doesn't support any of the adapters listed in the payment * information file. The <code>getParam()</code> method returns the name of * the attribute which contains the provider names. */ public static final int UNSUPPORTED_PROVIDERS = 4; /** * The device doesn't support the scheme of the update URL. The * <code>getParam()</code> method returns the update URL. */ public static final int UNSUPPORTED_URL_SCHEME = 5; /** The payment information is not yet valid. */ public static final int INFORMATION_NOT_YET_VALID = 6; /** The payment information has been expired. */ public static final int INFORMATION_EXPIRED = 7; /** The payment information is incomplete. */ public static final int INCOMPLETE_INFORMATION = 8; /** * The payment information contains an invalid PaymentSpecificInformation * field. The <code>getParam()</code> method returns the name of the * attribute which contains the invalid field. */ public static final int INVALID_ADAPTER_CONFIGURATION = 9; /** * The payment information contains an invalid PaymentSpecificPrice- * Information field. The <code>getParam()</code> method returns the name * of the attribute which contains the invalid field. */ public static final int INVALID_PRICE_INFORMATION = 10; /** * The payment update failed because the update URL is invalid. The * <code>getParam()</code> method returns the URL. */ public static final int INVALID_UPDATE_URL = 11; /** * The update server has been not found. The <code>getParam()</code> method * returns the URL of the payment update file. */ public static final int UPDATE_SERVER_NOT_FOUND = 12; /** * The payment update file has not been found on the server. The * <code>getParam()</code> method returns the URL of the payment update * file. */ public static final int UPDATE_NOT_FOUND = 13; /** The update server is busy. */ public static final int UPDATE_SERVER_BUSY = 14; /** * The http request failed. The <code>getParam()</code> method returns the * HTTP response code. */ public static final int UPDATE_REQUEST_ERROR = 15; /** * The payment update file has an invalid or missing MIME-type. The * <code>getParam()</code> method returns this type. */ public static final int INVALID_UPDATE_TYPE = 16; /** * The payment update file has an unsupported character set. The * <code>getParam()</code> method returns the character set name. */ public static final int UNSUPPORTED_UPDATE_CHARSET = 17; /** * The provider's certificate has expired or is not yet valid. The * <code>getParam()</code> method returns the subject name of the * certificate. */ public static final int EXPIRED_PROVIDER_CERT = 18; /** * The public key of the provider's root CA has expired. The * <code>getParam()</code> method returns the subject name of the CA * certificate. */ public static final int EXPIRED_CA_CERT = 19; /** * The provider's certificate is invalid. The <code>getParam()</code> method * returns the subject name of the certificate. */ public static final int INVALID_PROVIDER_CERT = 20; /** * The payment update file does not contain any certification chain which * can be verified. */ public static final int NO_TRUSTED_CHAIN = 21; /** The verification of the payment update file's signature has failed. */ public static final int SIGNATURE_VERIFICATION_FAILED = 22; /** The payment update file has an invalid properties file format. */ public static final int INVALID_PROPERTIES_FORMAT = 23; // the reason for the exception private int reason; // an additional string param private String param; /** * Creates an instance of the <code>PaymentException</code> class with the * given reason. * * @param reason the reason */ public PaymentException(int reason) { this.reason = reason; } /** * Creates an instance of the <code>PaymentException</code> class with the * given reason and the detail message. * * @param reason the reason * @param detail the detail message */ public PaymentException(int reason, String detail) { super(detail); this.reason = reason; } /** * Creates an instance of the <code>PaymentException</code> class with the * given reason, an additional string value which meaning depends on the * reason and the detail message. * * @param reason the reason * @param param the string value * @param detail the detail message */ public PaymentException(int reason, String param, String detail) { super(detail); this.reason = reason; this.param = param; } /** * Returns the reason for the exception as a number. * * @return the reason */ public final int getReason() { return reason; } /** * Sets an additional string value which depends on the reason for the * exception. * * @param param the string value * @see #getParam */ public final void setParam(String param) { this.param = param; } /** * Returns an additional string value which depends on the reason for the * exception. * * @return the string value * @see #setParam */ public final String getParam() { return param; } /** * Returns the detail message for the exception. * * @return the detail message */ public final String getDetail() { return super.getMessage(); } /** * Returns the full description of the exception. It uses the reason code, * the param value and the detail message to construct the description. * * @return the full description of the exception */ public final String getMessage() { String message; switch (reason) { case UNSUPPORTED_PAYMENT_INFO: message = "Unsupported version of the payment information (" + param + ")"; break; case MISSING_MANDATORY_ATTRIBUTE: message = "The required " + param + " attribute is missing"; break; case INVALID_ATTRIBUTE_VALUE: message = "The " + param + " attribute contains an " + "invalid value"; if (super.getMessage() != null) { message += " (" + super.getMessage() + ")"; } break; case UNSUPPORTED_ADAPTERS: message = "None of the adapters is supported (" + param + ")"; break; case UNSUPPORTED_PROVIDERS: message = "None of the providers is supported (" + param + ")"; break; case UNSUPPORTED_URL_SCHEME: message = "The update URL has an unsupported scheme (" + param + ")"; break; case INFORMATION_NOT_YET_VALID: message = "Payment information is not yet valid"; break; case INFORMATION_EXPIRED: message = "Payment information is expired"; break; case INCOMPLETE_INFORMATION: message = "The payment information is incomplete"; break; case INVALID_ADAPTER_CONFIGURATION: message = "The " + param + " attribute contains an " + "invalid adapter configuration string"; if (super.getMessage() != null) { message += " (" + super.getMessage() + ")"; } break; case INVALID_PRICE_INFORMATION: message = "The " + param + " attribute contains " + "invalid payment specific price information"; if (super.getMessage() != null) { message += " (" + super.getMessage() + ")"; } break; case INVALID_UPDATE_URL: message = "The update URL " + param + " is invalid"; break; case UPDATE_SERVER_NOT_FOUND: message = "The server for the payment update was not found " + "at the URL " + param; break; case UPDATE_NOT_FOUND: message = "The payment update file was not found at the URL " + param; break; case UPDATE_SERVER_BUSY: message = "The payment update server is busy"; break; case UPDATE_REQUEST_ERROR: message = "The payment update request has been denied by the " + "update server (HTTP response code = " + param + ")"; break; case INVALID_UPDATE_TYPE: message = "The payment update file has a missing or " + "incorrect type (" + param + ")"; break; case UNSUPPORTED_UPDATE_CHARSET: message = "The payment update file is in an unsupported " + "character set (" + param + ")"; break; case EXPIRED_PROVIDER_CERT: message = "The provider certificate (" + param + ") is " + "expired or not yet valid"; break; case EXPIRED_CA_CERT: message = "The root CA's public key expired (" + param + ")"; break; case INVALID_PROVIDER_CERT: message = "The provider certificate (" + param + ") is " + "invalid or unsupported"; break; case NO_TRUSTED_CHAIN: message = "Can't verify any provider certificate"; break; case SIGNATURE_VERIFICATION_FAILED: message = "Verification of the payment update signature failed"; break; case INVALID_PROPERTIES_FORMAT: message = "The payment update file is not a valid properties " + "file"; if (super.getMessage() != null) { message += " (" + super.getMessage() + ")"; } break; default: message = super.getMessage(); break; } return message; } }