tomj 2002/10/02 07:53:56 Modified: java/src/org/apache/axis/message Tag: interop4 SOAPFaultBuilder.java Log: Lookup wrapper types and convert them to their base type when passing them in to the Exception constructor. Revision Changes Path No revision No revision 1.23.8.2 +30 -3 xml-axis/java/src/org/apache/axis/message/SOAPFaultBuilder.java Index: SOAPFaultBuilder.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPFaultBuilder.java,v retrieving revision 1.23.8.1 retrieving revision 1.23.8.2 diff -u -r1.23.8.1 -r1.23.8.2 --- SOAPFaultBuilder.java 1 Oct 2002 20:38:52 -0000 1.23.8.1 +++ SOAPFaultBuilder.java 2 Oct 2002 14:53:56 -0000 1.23.8.2 @@ -139,11 +139,12 @@ // This is our exception class f = (AxisFault) faultData; } else { - // We need to create the exception, passing the data - // to the constructor + // We need to create the exception, + // passing the data to the constructor. + Class argClass = ConvertWrapper(faultData.getClass()); Constructor con = faultClass.getConstructor( - new Class[] { faultData.getClass() }); + new Class[] { argClass }); f = (AxisFault) con.newInstance(new Object[] { faultData }); } } @@ -248,5 +249,31 @@ faultActor = (String) value; } + } + + /** + * A simple map of holder objects and their primitive types + */ + private static HashMap TYPES = new HashMap(7); + + static { + TYPES.put(java.lang.Integer.class, int.class); + TYPES.put(java.lang.Float.class, float.class); + TYPES.put(java.lang.Boolean.class, boolean.class); + TYPES.put(java.lang.Double.class, double.class); + TYPES.put(java.lang.Byte.class, byte.class); + TYPES.put(java.lang.Short.class, short.class); + TYPES.put(java.lang.Long.class, long.class); + } + + /** + * Internal method to convert wrapper classes to their base class + */ + private Class ConvertWrapper(Class cls) { + Class ret = (Class) TYPES.get(cls); + if (ret != null) { + return ret; + } + return cls; } }