1 package org.apache.maven.scm.provider.integrity; 2 3 /** 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import com.mks.api.response.APIException; 23 import com.mks.api.response.Response; 24 import com.mks.api.response.WorkItemIterator; 25 import com.mks.api.response.InterruptedException; 26 27 /** 28 * Helper class to appropriately diagnose an APIException 29 * @version $Id: ExceptionHandler.java 1.2 2011/08/22 13:06:45EDT Cletus D'Souza (dsouza) Exp $ 30 * @author <a href="mailto:cletus@mks.com">Cletus D'Souza</a> 31 */ 32 public class ExceptionHandler 33 { 34 // Private variables to provide diagnostics on the exception 35 private String message; 36 private String command; 37 private int exitCode; 38 39 /** 40 * Constructor requires a single APIException to debug 41 * @param ex APIException 42 */ 43 public ExceptionHandler(APIException ex) 44 { 45 46 // API Exceptions can be nested. Hence we will need to recurse the 47 // exception hierarchy to dig for a conclusive message 48 Response response = ex.getResponse(); 49 50 // Print the stack trace to standard out for debugging purposes 51 ex.printStackTrace(); 52 53 // The API failed to execute the command (i.e. a real API error) 54 if( null == response) 55 { 56 message = ex.getMessage(); 57 command = new java.lang.String(); 58 //exitCode = Integer.parseInt(ex.getExceptionId()); 59 exitCode = -1; 60 } 61 else 62 { 63 command = response.getCommandString(); 64 try 65 { 66 exitCode = response.getExitCode(); 67 } 68 catch(InterruptedException ie) 69 { 70 // Just print out the stack trace 71 ie.printStackTrace(); 72 exitCode = -1; 73 } 74 WorkItemIterator wit = response.getWorkItems(); 75 // In the event there is a problem with one of the command's elements 76 // we have to dig deeper into the exception... 77 try 78 { 79 while(wit.hasNext()){ wit.next(); } 80 // If we got here then just extract the message 81 if(ex.getMessage() != null) 82 { 83 message = ex.getMessage(); 84 } 85 } 86 catch(APIException ae) 87 { 88 // This message will be the real reason for the exception 89 String curMessage = ae.getMessage(); 90 if(curMessage != null) 91 { 92 message = curMessage; 93 } 94 ae.printStackTrace(); 95 } 96 } 97 } 98 99 /** 100 * Returns the Message obtained from the APIException 101 * @return message APIException String 102 */ 103 public String getMessage() 104 { 105 return message; 106 } 107 108 /** 109 * Returns the executed command that caused the exception 110 * @return command Complete CLI Command String 111 */ 112 public String getCommand() 113 { 114 return command; 115 } 116 117 /** 118 * Returns the exit codes associated with executing the command 119 * @return exitCode API/CLI Exit Code 120 */ 121 public int getExitCode() 122 { 123 return exitCode; 124 } 125 }