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

📄 beandeserializer.java

📁 Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应的Java工程 进行使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        // It is an error if the dSer is not found - the only case where we        // wouldn't have a deserializer at this point is when we're trying        // to deserialize something we have no clue about (no good xsi:type,        // no good metadata).        if (dSer == null) {            dSer = context.getDeserializerForClass(propDesc.getType());        }        // Fastpath nil checks...        if (context.isNil(attributes)) {            if (propDesc != null && (propDesc.isIndexed()||isArray)) {                if (!((dSer != null) && (dSer instanceof ArrayDeserializer))) {                    collectionIndex++;                    dSer.registerValueTarget(new BeanPropertyTarget(value,                            propDesc, collectionIndex));                    addChildDeserializer(dSer);                    return (SOAPHandler)dSer;                }            }            return null;        }                              if (dSer == null) {            throw new SAXException(Messages.getMessage("noDeser00",                                                       childXMLType.toString()));        }        if (constructorToUse != null) {            if (constructorTarget == null) {                constructorTarget = new ConstructorTarget(constructorToUse, this);            }            dSer.registerValueTarget(constructorTarget);        } else if (propDesc.isWriteable()) {            // If this is an indexed property, and the deserializer we found            // was NOT the ArrayDeserializer, this is a non-SOAP array:            // <bean>            //   <field>value1</field>            //   <field>value2</field>            // ...            // In this case, we want to use the collectionIndex and make sure            // the deserialized value for the child element goes into the            // right place in the collection.            // Register value target            if ((itemQName != null || propDesc.isIndexed() || isArray) && !(dSer instanceof ArrayDeserializer)) {                collectionIndex++;                dSer.registerValueTarget(new BeanPropertyTarget(value,                        propDesc, collectionIndex));            } else {                // If we're here, the element maps to a single field value,                // whether that be a "basic" type or an array, so use the                // normal (non-indexed) BeanPropertyTarget form.                collectionIndex = -1;                dSer.registerValueTarget(new BeanPropertyTarget(value,                                                                propDesc));            }        }                // Let the framework know that we need this deserializer to complete        // for the bean to complete.        addChildDeserializer(dSer);                return (SOAPHandler)dSer;    }    /**     * Get a BeanPropertyDescriptor which indicates where we should     * put extensibility elements (i.e. XML which falls under the     * auspices of an &lt;xsd:any&gt; declaration in the schema)     *     * @return an appropriate BeanPropertyDescriptor, or null     */    public BeanPropertyDescriptor getAnyPropertyDesc() {        if (typeDesc == null)            return null;               return typeDesc.getAnyDesc();    }    /**     * Set the bean properties that correspond to element attributes.     *      * This method is invoked after startElement when the element requires     * deserialization (i.e. the element is not an href and the value is not     * nil.)     * @param namespace is the namespace of the element     * @param localName is the name of the element     * @param prefix is the prefix of the element     * @param attributes are the attributes on the element...used to get the     *                   type     * @param context is the DeserializationContext     */    public void onStartElement(String namespace, String localName,                               String prefix, Attributes attributes,                               DeserializationContext context)            throws SAXException {        // The value should have been created or assigned already.        // This code may no longer be needed.        if (value == null && constructorToUse == null) {            // create a value            try {                value=javaType.newInstance();            } catch (Exception e) {                throw new SAXException(Messages.getMessage("cantCreateBean00",                                                             javaType.getName(),                                                             e.toString()));            }        }        // If no type description meta data, there are no attributes,        // so we are done.        if (typeDesc == null)            return;        // loop through the attributes and set bean properties that         // correspond to attributes        for (int i=0; i < attributes.getLength(); i++) {            QName attrQName = new QName(attributes.getURI(i),                                        attributes.getLocalName(i));            String fieldName = typeDesc.getFieldNameForAttribute(attrQName);            if (fieldName == null)                continue;            FieldDesc fieldDesc = typeDesc.getFieldByName(fieldName);                        // look for the attribute property            BeanPropertyDescriptor bpd =                    (BeanPropertyDescriptor) propertyMap.get(fieldName);            if (bpd != null) {                if (constructorToUse == null) {                    // check only if default constructor                    if (!bpd.isWriteable() || bpd.isIndexed()) continue ;                }                                // Get the Deserializer for the attribute                Deserializer dSer = getDeserializer(fieldDesc.getXmlType(),                                                    bpd.getType(),                                                     null,                                                    context);                if (dSer == null) {                    dSer = context.getDeserializerForClass(bpd.getType());                    // The java type is an array, but the context didn't                    // know that we are an attribute.  Better stick with                    // simple types..                    if (dSer instanceof ArrayDeserializer)                    {                        SimpleListDeserializerFactory factory =                            new SimpleListDeserializerFactory(bpd.getType(),                                    fieldDesc.getXmlType());                        dSer = (Deserializer)                            factory.getDeserializerAs(dSer.getMechanismType());                    }                }                if (dSer == null)                    throw new SAXException(                            Messages.getMessage("unregistered00",                                                 bpd.getType().toString()));                                if (! (dSer instanceof SimpleDeserializer))                    throw new SAXException(                            Messages.getMessage("AttrNotSimpleType00",                                                  bpd.getName(),                                                  bpd.getType().toString()));                                // Success!  Create an object from the string and set                // it in the bean                try {                    dSer.onStartElement(namespace, localName, prefix,                                        attributes, context);                    Object val = ((SimpleDeserializer)dSer).                        makeValue(attributes.getValue(i));                    if (constructorToUse == null) {                        bpd.set(value, val);                    } else {                        // add value for our constructor                        if (constructorTarget == null) {                            constructorTarget = new ConstructorTarget(constructorToUse, this);                        }                        constructorTarget.set(val);                    }                } catch (Exception e) {                    throw new SAXException(e);                }                            } // if        } // attribute loop    }    /**     * Get the Deserializer for the attribute or child element.     * @param xmlType QName of the attribute/child element or null if not known.     * @param javaType Class of the corresponding property     * @param href String is the value of the href attribute, which is used     *             to determine whether the child element is complete or an      *             href to another element.     * @param context DeserializationContext     * @return Deserializer or null if not found.    */    protected Deserializer getDeserializer(QName xmlType,                                            Class javaType,                                            String href,                                           DeserializationContext context) {        if (javaType.isArray()) {            context.setDestinationClass(javaType);        }         // See if we have a cached deserializer        if (cacheStringDSer != null) {            if (String.class.equals(javaType) &&                href == null &&                (cacheXMLType == null && xmlType == null ||                 cacheXMLType != null && cacheXMLType.equals(xmlType))) {                cacheStringDSer.reset();                return cacheStringDSer;            }        }                Deserializer dSer = null;        if (xmlType != null && href == null) {            // Use the xmlType to get the deserializer.            dSer = context.getDeserializerForType(xmlType);        } else {            // If the xmlType is not set, get a default xmlType            TypeMapping tm = context.getTypeMapping();            QName defaultXMLType = tm.getTypeQName(javaType);            // If there is not href, then get the deserializer            // using the javaType and default XMLType,            // If there is an href, the create the generic            // DeserializerImpl and set its default type (the            // default type is used if the href'd element does             // not have an xsi:type.            if (href == null) {                dSer = context.getDeserializer(javaType, defaultXMLType);            } else {                dSer = new DeserializerImpl();                context.setDestinationClass(javaType);                dSer.setDefaultType(defaultXMLType);            }        }        if (javaType.equals(String.class) &&            dSer instanceof SimpleDeserializer) {            cacheStringDSer = (SimpleDeserializer) dSer;            cacheXMLType = xmlType;        }        return dSer;    }    public void characters(char[] chars, int start, int end) throws SAXException {        val.write(chars, start, end);    }    public void onEndElement(String namespace, String localName,                             DeserializationContext context) throws SAXException {        handleMixedContent();    }    protected void handleMixedContent() throws SAXException {        BeanPropertyDescriptor propDesc = getAnyPropertyDesc();        if (propDesc == null || val.size() == 0) {            return;        }        String textValue = val.toString().trim();        val.reset();        if (textValue.length() == 0) {            return;        }        try {            MessageElement[] curElements = (MessageElement[]) propDesc.get(value);            int length = 0;            if (curElements != null) {                length = curElements.length;            }            MessageElement[] newElements = new MessageElement[length + 1];            if (curElements != null) {                System.arraycopy(curElements, 0,                        newElements, 0, length);            }            MessageElement thisEl = new MessageElement(new org.apache.axis.message.Text(textValue));            newElements[length] = thisEl;            propDesc.set(value, newElements);        } catch (Exception e) {            throw new SAXException(e);        }    }}

⌨️ 快捷键说明

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