From: Thomas D. <tdi...@us...> - 2004-08-15 22:08:33
|
User: tdiesler Date: 04/08/15 15:08:21 Modified: src/main/org/apache/axis/message SOAPFaultBuilder.java SOAPFaultDetailsBuilder.java Log: Simplify Fault building Revision Changes Path 1.2 +27 -38 webservice/src/main/org/apache/axis/message/SOAPFaultBuilder.java Index: SOAPFaultBuilder.java =================================================================== RCS file: /cvsroot/jboss/webservice/src/main/org/apache/axis/message/SOAPFaultBuilder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SOAPFaultBuilder.java 20 Jul 2004 12:59:53 -0000 1.1 +++ SOAPFaultBuilder.java 15 Aug 2004 22:08:20 -0000 1.2 @@ -183,55 +183,44 @@ // This is our exception class f = (AxisFault)faultData; } - else + // If the faultData is of the expected faultClass type + else if (faultClass.isAssignableFrom(faultData.getClass())) + { + f = AxisFault.makeFault((Exception)faultData); + } + + // Create the exception, passing the data to the constructor. + if (f == null) { - // We need to create the exception, - // passing the data to the constructor. - Class argClass = ConvertWrapper(faultData.getClass()); try { - Constructor con = - faultClass.getConstructor(new Class[]{argClass}); - f = (AxisFault)con.newInstance(new Object[]{faultData}); + Constructor ctor = faultClass.getConstructor(new Class[]{faultData.getClass()}); + f = (AxisFault)ctor.newInstance(new Object[]{faultData}); } - catch (Exception e) + catch (Exception ignore) { - - if (Exception.class.isAssignableFrom(faultData.getClass())) - { - // if an exception, try to construct it using known parameters - Constructor[] constructs = argClass.getConstructors(); - for (int x = 0; x < constructs.length; x++) - { - // try to find just string parameter constructor - Constructor construct = constructs[x]; - Class[] params = construct.getParameterTypes(); - if (params.length == 1 && params[0].isAssignableFrom(String.class)) - { - try - { - Exception custEx = (Exception)construct.newInstance(new Object[]{((Exception)faultData).getMessage()}); - f = AxisFault.makeFault(custEx); - break; - } - catch (Exception exc) - { - log.warn("Can not create new instance of " + argClass, e); - } - } - } - } - - // Don't do anything here, since a problem above means - // we'll just fall through and use a plain AxisFault. + // Don't do anything here } + } - if (f == null && faultData instanceof Exception) + // Create the exception, passing the data to the constructor. + if (f == null && Exception.class.isAssignableFrom(faultData.getClass())) + { + // if an exception, try to construct it using known parameters + try { - f = AxisFault.makeFault((Exception)faultData); + Constructor ctor = faultClass.getConstructor(new Class[]{String.class}); + Exception custEx = (Exception)ctor.newInstance(new Object[]{((Exception)faultData).getMessage()}); + f = AxisFault.makeFault(custEx); + } + catch (Exception ignore) + { + // Don't do anything here } } + } + // If we have an AxisFault, set the fields if (AxisFault.class.isAssignableFrom(faultClass)) { 1.2 +3 -160 webservice/src/main/org/apache/axis/message/SOAPFaultDetailsBuilder.java Index: SOAPFaultDetailsBuilder.java =================================================================== RCS file: /cvsroot/jboss/webservice/src/main/org/apache/axis/message/SOAPFaultDetailsBuilder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SOAPFaultDetailsBuilder.java 20 Jul 2004 12:59:54 -0000 1.1 +++ SOAPFaultDetailsBuilder.java 15 Aug 2004 22:08:20 -0000 1.2 @@ -1,357 +1,200 @@ /* - * Copyright 2001-2004 The Apache Software Foundation. - - * - + * * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * - + * * http://www.apache.org/licenses/LICENSE-2.0 - - * - + * * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package org.apache.axis.message; - import org.apache.axis.AxisFault; - import org.apache.axis.Constants; - import org.apache.axis.MessageContext; - import org.apache.axis.description.FaultDesc; - import org.apache.axis.description.OperationDesc; - import org.apache.axis.encoding.Callback; - import org.apache.axis.encoding.CallbackTarget; - import org.apache.axis.encoding.DeserializationContext; - import org.apache.axis.encoding.Deserializer; - import org.apache.axis.encoding.DeserializerImpl; - import org.apache.axis.utils.ClassUtils; - import org.apache.axis.utils.Messages; - import org.apache.axis.soap.SOAPConstants; - import org.xml.sax.Attributes; - import org.xml.sax.SAXException; - import javax.xml.namespace.QName; - /** * Handle deserializing fault details. * * @author Glen Daniels (gda...@ap...) * @author Tom Jordahl (to...@ma...) */ - public class SOAPFaultDetailsBuilder extends SOAPHandler implements Callback - { - protected SOAPFaultBuilder builder; - public SOAPFaultDetailsBuilder(SOAPFaultBuilder builder) { - this.builder = builder; - } - public void startElement(String namespace, String localName, - String prefix, Attributes attributes, - DeserializationContext context) - throws SAXException - { - SOAPConstants soapConstants = Constants.DEFAULT_SOAP_VERSION; - if (context.getMessageContext() != null) - soapConstants = context.getMessageContext().getSOAPConstants(); - if (soapConstants == SOAPConstants.SOAP12_CONSTANTS && - attributes.getValue(Constants.URI_SOAP12_ENV, Constants.ATTR_ENCODING_STYLE) != null) { - AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_SENDER, - null, Messages.getMessage("noEncodingStyleAttrAppear", "Detail"), null, null, null); - throw new SAXException(fault); - } - super.startElement(namespace, localName, prefix, attributes, context); - } - public SOAPHandler onStartChild(String namespace, - String name, - String prefix, - Attributes attributes, - DeserializationContext context) - throws SAXException - { - // Get QName of element - QName qn = new QName(namespace, name); - - // Look for <exceptionName> element and create a class - // with that name - this is Axis specific and is - // replaced by the Exception map - if (name.equals("exceptionName")) { - // Set up deser of exception name string - Deserializer dser = context.getDeserializerForType(Constants.XSD_STRING); - dser.registerValueTarget(new CallbackTarget(this, "exceptionName")); - return (SOAPHandler)dser; - } - - // Look up this element in our faultMap - // if we find a match, this element is the fault data - MessageContext msgContext = context.getMessageContext(); - SOAPConstants soapConstants = msgContext.getSOAPConstants(); - OperationDesc op = msgContext.getOperation(); - Class faultClass = null; - QName faultXmlType = null; - if (op != null) { - FaultDesc faultDesc = null; - // allow fault type to be denoted in xsi:type - faultXmlType = context.getTypeFromAttributes(namespace, - name, - attributes); - if (faultXmlType != null) { - faultDesc = op.getFaultByXmlType(faultXmlType); - } - - // If we didn't get type information, look up QName of fault - if (faultDesc == null) { - faultDesc = op.getFaultByQName(qn); - if ((faultXmlType == null) && (faultDesc != null)) { - faultXmlType = faultDesc.getXmlType(); - } - } - - // Set the class if we found a description - if (faultDesc != null) { - try { - faultClass = ClassUtils.forName(faultDesc.getClassName()); - } catch (ClassNotFoundException e) { - // Just create an AxisFault, no custom exception - } - } - } else { - faultXmlType = context.getTypeFromAttributes(namespace, - name, - attributes); - } - if (faultClass == null) { - faultClass = - context.getTypeMapping().getClassForQName(faultXmlType); - } - if (faultClass != null && faultXmlType != null) { - builder.setFaultClass(faultClass); - builder.setWaiting(true); - // register callback for the data, use the xmlType from fault info - Deserializer dser = null; - if (attributes.getValue(soapConstants.getAttrHref()) == null) { - dser = context.getDeserializerForType(faultXmlType); - } else { - dser = new DeserializerImpl(); - dser.setDefaultType(faultXmlType); - } - if (dser != null) { - dser.registerValueTarget(new CallbackTarget(this, "faultData")); - } - return (SOAPHandler)dser; - } - return null; - } - - /* - * Defined by Callback. - * This method gets control when the callback is invoked. - * @param is the value to set. - * @param hint is an Object that provide additional hint information. - */ - public void setValue(Object value, Object hint) - { - if ("faultData".equals(hint)) { - builder.setFaultData(value); - } else if ("exceptionName".equals(hint)) { - String faultClassName = (String)value; - try { - Class faultClass = ClassUtils.forName(faultClassName); - builder.setFaultClass(faultClass); - } catch (ClassNotFoundException e) { - // Just create an AxisFault, no custom exception - } - } - } - } - |