001package org.hl7.fhir.dstu2.utils.client; 002 003/*- 004 * #%L 005 * org.hl7.fhir.dstu2 006 * %% 007 * Copyright (C) 2014 - 2019 Health Level 7 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023 024 025/* 026 Copyright (c) 2011+, HL7, Inc. 027 All rights reserved. 028 029 Redistribution and use in source and binary forms, with or without modification, 030 are permitted provided that the following conditions are met: 031 032 * Redistributions of source code must retain the above copyright notice, this 033 list of conditions and the following disclaimer. 034 * Redistributions in binary form must reproduce the above copyright notice, 035 this list of conditions and the following disclaimer in the documentation 036 and/or other materials provided with the distribution. 037 * Neither the name of HL7 nor the names of its contributors may be used to 038 endorse or promote products derived from this software without specific 039 prior written permission. 040 041 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 042 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 043 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 044 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 045 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 046 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 047 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 048 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 049 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 050 POSSIBILITY OF SUCH DAMAGE. 051 052*/ 053 054import java.util.ArrayList; 055import java.util.List; 056 057import org.hl7.fhir.dstu2.model.OperationOutcome; 058 059/** 060 * FHIR client exception. 061 * 062 * FHIR API exception will be wrapped in FHIR client exceptions. OperationOutcome errors 063 * resulting from the server can be access by calling: 064 * <pre><code> 065 * if(e.hasServerErrors()) { 066 * List<OperationOutcome> errors = e.getServerErrors(); 067 * //process errors... 068 * } 069 * </code></pre> 070 * 071 * 072 * 073 * @author Claude Nanjo 074 * 075 */ 076public class EFhirClientException extends RuntimeException { 077 private static final long serialVersionUID = 1L; 078 private List<OperationOutcome> errors = new ArrayList<OperationOutcome>(); 079 080 public EFhirClientException(String message) { 081 super(message); 082 } 083 084 public EFhirClientException(String message, List<OperationOutcome> serverErrors) { 085 super(message); 086 if(serverErrors != null && serverErrors.size() > 0) { 087 errors.addAll(serverErrors); 088 } 089 } 090 091 public EFhirClientException(Exception cause) { 092 super(cause); 093 } 094 095 public EFhirClientException(String message, Exception cause) { 096 super(message, cause); 097 } 098 099 /** 100 * Generate EFhirClientException which include a message indicating the cause of the exception 101 * along with any OperationOutcome server error that may have resulted. 102 * 103 * @param message 104 * @param serverError 105 */ 106 public EFhirClientException(String message, OperationOutcome serverError) { 107 super(message); 108 if(serverError != null) { 109 errors.add(serverError); 110 } 111 } 112 113 /** 114 * Generate EFhirClientException indicating the cause of the exception 115 * along with any OperationOutcome server error the server may have generated. 116 * 117 * A default message of "One or more server side errors have occurred during this operation. Refer to e.getServerErrors() for additional details." 118 * will be returned to users. 119 * 120 * @param message 121 * @param serverError 122 */ 123 public EFhirClientException(OperationOutcome serverError) { 124 super("Error on the server: "+serverError.getText().getDiv().allText()+". Refer to e.getServerErrors() for additional details."); 125 if(serverError != null) { 126 errors.add(serverError); 127 } 128 } 129 130 /** 131 * Method returns all OperationOutcome server errors that are 132 * associated with this exception. 133 * 134 * @return 135 */ 136 public List<OperationOutcome> getServerErrors() { 137 return errors; 138 } 139 140 /** 141 * Method returns true if exception contains server OperationOutcome errors in payload. 142 * 143 * @return 144 */ 145 public boolean hasServerErrors() { 146 return errors.size() > 0; 147 } 148 149}