// // Examine a single method to see if it raises SQLFeatureNotSupportedException. // private void vetMethod( Object candidate, Class iface, Method method, HashSet<String> unsupportedList, HashSet<String> notUnderstoodList) throws Exception { try { method.invoke(candidate, getNullArguments(method.getParameterTypes())); // it's ok for the method to succeed } catch (Throwable e) { if (!(e instanceof InvocationTargetException)) { recordUnexpectedError(candidate, iface, method, notUnderstoodList, e); } else { Throwable cause = e.getCause(); if (cause instanceof SQLFeatureNotSupportedException) { boolean isExcludable = isExcludable(method); if (!isExcludable) { StackTraceElement[] stack = cause.getStackTrace(); int i = 0; while (i < stack.length && !stack[i].getMethodName().equals("notImplemented")) { ++i; } while (i < stack.length && stack[i].getMethodName().equals("notImplemented")) { ++i; } if (i == stack.length) { // cause.printStackTrace(); } unsupportedList.add( candidate.getClass().getName() + ": " + method + "@" + (i == stack.length ? "no source" : cause.getStackTrace()[i])); } else { } } else if (cause instanceof SQLException) { // swallow other SQLExceptions, caused by bogus args } else if (cause instanceof NullPointerException) { // swallow other NPEs, caused by bogus args } else if (cause instanceof ArrayIndexOutOfBoundsException) { // swallow these, caused by bogus args } else { recordUnexpectedError(candidate, iface, method, notUnderstoodList, cause); } } } }
/** * Checks if the invocation of the method throws a SQLExceptio as expected. * * @param LOB the Object that implements the Blob interface * @param method the method that needs to be tested to ensure that it throws the correct exception * @return true If the method throws the SQLException required after the free method has been * called on the LOB object */ boolean checkIfMethodThrowsSQLException(Object LOB, Method method) throws IllegalAccessException, InvocationTargetException { try { method.invoke(LOB, getNullValues(method.getParameterTypes())); } catch (InvocationTargetException ite) { Throwable cause = ite.getCause(); if (cause instanceof SQLException) { return ((SQLException) cause).getSQLState().equals("XJ215"); } throw ite; } return false; }
void generateFindMethodAndArgs(Method method, IndentedWriter iw) throws IOException { iw.println("Class[] argTypes = "); iw.println("{"); iw.upIndent(); Class[] argTypes = method.getParameterTypes(); for (int i = 0, len = argTypes.length; i < len; ++i) { if (i != 0) iw.println(","); iw.print(CodegenUtils.simpleClassName(argTypes[i]) + ".class"); } iw.println(); iw.downIndent(); iw.println("};"); iw.println( "Method method = Connection.class.getMethod( \042" + method.getName() + "\042 , argTypes );"); iw.println(); iw.println("Object[] args = "); iw.println("{"); iw.upIndent(); for (int i = 0, len = argTypes.length; i < len; ++i) { if (i != 0) iw.println(","); String argName = CodegenUtils.generatedArgumentName(i); Class argType = argTypes[i]; if (argType.isPrimitive()) { if (argType == boolean.class) iw.print("Boolean.valueOf( " + argName + " )"); else if (argType == byte.class) iw.print("new Byte( " + argName + " )"); else if (argType == char.class) iw.print("new Character( " + argName + " )"); else if (argType == short.class) iw.print("new Short( " + argName + " )"); else if (argType == int.class) iw.print("new Integer( " + argName + " )"); else if (argType == long.class) iw.print("new Long( " + argName + " )"); else if (argType == float.class) iw.print("new Float( " + argName + " )"); else if (argType == double.class) iw.print("new Double( " + argName + " )"); } else iw.print(argName); } iw.downIndent(); iw.println("};"); }