package org.apache.commons.betwixt; import java.beans.BeanInfo; import java.beans.IntrospectionException; import org.apache.commons.betwixt.expression.MethodUpdater; import org.apache.commons.betwixt.expression.PatchedMethodUpdater; import org.apache.commons.betwixt.expression.Updater; /** * Here we override betwixt XMLIntrospector so that we can replace any * MethodUpdater by our PatchedMethodUpdater that knows how to handle arrays of * primitive types (int, byte, char and so on ...) * * @author dgrandemange * */ public class PatchedXMLIntrospector extends XMLIntrospector { @Override public XMLBeanInfo introspect(BeanInfo beanInfo) throws IntrospectionException { XMLBeanInfo xmlBeanInfo = super.introspect(beanInfo); ElementDescriptor elementDescriptor = xmlBeanInfo .getElementDescriptor(); patchElementDescriptor(elementDescriptor); return xmlBeanInfo; } /** * @param elementDescriptor */ protected void patchElementDescriptor(ElementDescriptor elementDescriptor) { if (null == elementDescriptor) { return; } ElementDescriptor[] elementDescriptors = elementDescriptor .getElementDescriptors(); if (0 == elementDescriptors.length) { Updater updater = elementDescriptor.getUpdater(); if (updater instanceof MethodUpdater) { PatchedMethodUpdater patchUpdater = new PatchedMethodUpdater( ((MethodUpdater) updater).getMethod()); elementDescriptor.setUpdater(patchUpdater); } } else { for (ElementDescriptor child : elementDescriptors) { patchElementDescriptor(child); } } } }