/* * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code 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. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the LICENSE file that accompanied this code. * * This code 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 in the LICENSE file that * accompanied this code). * * 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 USA or visit www.sun.com if you need additional information or * have any questions. */ package com.sun.xml.internal.bind.v2.runtime; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import com.sun.xml.internal.bind.v2.model.core.ErrorHandler; /** * A list of {@link IllegalAnnotationException} wrapped in one exception. * * <p> * This exception is used to report all the errors to the client application * through {@link JAXBContext#newInstance}. * * @since JAXB 2.0 EA1 * @author Kohsuke Kawaguchi */ public class IllegalAnnotationsException extends JAXBException { private final List<IllegalAnnotationException> errors; private static final long serialVersionUID = 1L; public IllegalAnnotationsException(List<IllegalAnnotationException> errors) { super(errors.size()+" counts of IllegalAnnotationExceptions"); assert !errors.isEmpty() : "there must be at least one error"; this.errors = Collections.unmodifiableList(new ArrayList<IllegalAnnotationException>(errors)); } public String toString() { StringBuilder sb = new StringBuilder(super.toString()); sb.append('\n'); for( IllegalAnnotationException error : errors ) sb.append(error.toString()).append('\n'); return sb.toString(); } /** * Returns a read-only list of {@link IllegalAnnotationException}s * wrapped in this exception. * * @return * a non-null list. */ public List<IllegalAnnotationException> getErrors() { return errors; } public static class Builder implements ErrorHandler { private final List<IllegalAnnotationException> list = new ArrayList<IllegalAnnotationException>(); public void error(IllegalAnnotationException e) { list.add(e); } /** * If an error was reported, throw the exception. * Otherwise exit normally. */ public void check() throws IllegalAnnotationsException { if(list.isEmpty()) return; throw new IllegalAnnotationsException(list); } } }