⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beanpropertytarget.java

📁 Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应的Java工程 进行使用
💻 JAVA
字号:
/* * 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.encoding.ser;import org.apache.axis.components.logger.LogFactory;import org.apache.axis.encoding.Target;import org.apache.axis.utils.BeanPropertyDescriptor;import org.apache.axis.utils.JavaUtils;import org.apache.axis.utils.Messages;import org.apache.commons.logging.Log;import org.xml.sax.SAXException;import java.lang.reflect.Array;import java.lang.reflect.InvocationTargetException;/** * Class which knows how to update a bean property */public class BeanPropertyTarget implements Target {    protected static Log log =        LogFactory.getLog(BeanPropertyTarget.class.getName());    private Object object;    private BeanPropertyDescriptor pd;    private int index = -1;        /**      * This constructor is used for a normal property.     * @param object is the bean class     * @param pd is the property     **/    public BeanPropertyTarget(Object object, BeanPropertyDescriptor pd) {        this.object = object;        this.pd     = pd;        this.index  = -1;  // disable indexing    }        /**      * This constructor is used for an indexed property.     * @param object is the bean class     * @param pd is the property     * @param i is the index               **/    public BeanPropertyTarget(Object object, BeanPropertyDescriptor pd, int i) {        this.object = object;        this.pd     = pd;        this.index  = i;    }        /**     * set the bean property with specified value     * @param value is the value.     */    public void set(Object value) throws SAXException {        try {            // Set the value on the bean property.             // Use the indexed property method if the             // index is set.            if (index < 0) {                pd.set(object, value);            } else {                pd.set(object, index, value);            }        } catch (Exception e) {            try {                // If an exception occurred,                 // see it the value can be converted into                // the expected type.                Class type = pd.getType();                if (value.getClass().isArray()                         && value.getClass().getComponentType().isPrimitive()                        && type.isArray()                         && type.getComponentType().equals(Object.class))                {                    //we make our own array type here.                    type = Array.newInstance(JavaUtils.getWrapperClass(value.getClass().getComponentType()),0).getClass();                }                if (JavaUtils.isConvertable(value, type)) {                    value = JavaUtils.convert(value, type);                    if (index < 0)                        pd.set(object, value);                    else                        pd.set(object, index, value);                } else {                    // It is possible that an indexed                    // format was expected, but the                    // entire array was sent.  In such                     // cases traverse the array and                     // call the setter for each item.                    if (index == 0 &&                        value.getClass().isArray() &&                        !type.getClass().isArray()) {                        for (int i=0; i<Array.getLength(value); i++) {                            Object item =                                 JavaUtils.convert(Array.get(value, i), type);                            pd.set(object, i, item);                         }                    } else {                        // Can't proceed.  Throw an exception that                        // will be caught in the catch block below.                        throw e;                    }                }            } catch (Exception ex) {                // Throw a SAX exception with an informative                // message.                String field= pd.getName();                if (index >=0) {                    field += "[" + index + "]";                }                if (log.isErrorEnabled()) {                    //TODO: why is this just logged on the server-side and not thrown back to the client???                    String valueType = "null";                    if (value != null)                        valueType = value.getClass().getName();                    log.error(Messages.getMessage("cantConvert02",                            new String[]{                                valueType,                                field,                                (index >= 0) ?                                        pd.getType().getComponentType().getName() :                                        pd.getType().getName()                            }));                }                if(ex instanceof InvocationTargetException) {                    Throwable t = ((InvocationTargetException)ex).getTargetException();                    if( t != null) {                        String classname = this.object.getClass().getName();                        //show the context where this exception occured.                        throw new SAXException(Messages.getMessage("cantConvert04",                                                   new String[] {                                                       classname,                                                       field,                                                       (value==null)?null:value.toString(),                                                       t.getMessage()}));                    }                }                throw new SAXException(ex);            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -