private XmlJavaTypeAdapter getApplicableAdapter(T type) { XmlJavaTypeAdapter jta = seed.readAnnotation(XmlJavaTypeAdapter.class); if(jta!=null && isApplicable(jta,type)) return jta; // check the applicable adapters on the package XmlJavaTypeAdapters jtas = reader().getPackageAnnotation(XmlJavaTypeAdapters.class, parent.clazz, seed ); if(jtas!=null) { for (XmlJavaTypeAdapter xjta : jtas.value()) { if(isApplicable(xjta,type)) return xjta; } } jta = reader().getPackageAnnotation(XmlJavaTypeAdapter.class, parent.clazz, seed ); if(isApplicable(jta,type)) return jta; // then on the target class C refType = nav().asDecl(type); if(refType!=null) { jta = reader().getClassAnnotation(XmlJavaTypeAdapter.class, refType, seed ); if(jta!=null && isApplicable(jta,type)) // the one on the type always apply. return jta; } return null; }
private void generateXmlJavaTypeAdapters(AnnotationVisitor av, XmlJavaTypeAdapters adapters) { AnnotationVisitor av1 = av.visitArray("value"); for (XmlJavaTypeAdapter adapter : adapters.value()) { AnnotationVisitor av2 = av1.visitAnnotation(null, "Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapter;"); generateXmlJavaTypeAdapter(av2, adapter); av2.visitEnd(); } av1.visitEnd(); } private void generateXmlJavaTypeAdapter(AnnotationVisitor av, XmlJavaTypeAdapter adapter) {
for (XmlJavaTypeAdapter info : adapters.value()) { XmlAdapter<Object,Object> adapter = checkAdapter(info, type, forSerialization); if (adapter != null) {
private XmlJavaTypeAdapter getApplicableAdapter(T type) { XmlJavaTypeAdapter jta = seed.readAnnotation(XmlJavaTypeAdapter.class); if(jta!=null && isApplicable(jta,type)) return jta; // check the applicable adapters on the package XmlJavaTypeAdapters jtas = reader().getPackageAnnotation(XmlJavaTypeAdapters.class, parent.clazz, seed ); if(jtas!=null) { for (XmlJavaTypeAdapter xjta : jtas.value()) { if(isApplicable(xjta,type)) return xjta; } } jta = reader().getPackageAnnotation(XmlJavaTypeAdapter.class, parent.clazz, seed ); if(isApplicable(jta,type)) return jta; // then on the target class C refType = nav().asDecl(type); if(refType!=null) { jta = reader().getClassAnnotation(XmlJavaTypeAdapter.class, refType, seed ); if(jta!=null && isApplicable(jta,type)) // the one on the type always apply. return jta; } return null; }
static XmlJavaTypeAdapter getFieldXJTA(final Field f) { XmlJavaTypeAdapter adapter = f.getAnnotation(XmlJavaTypeAdapter.class); if (adapter == null) { adapter = f.getType().getAnnotation(XmlJavaTypeAdapter.class); } if (adapter == null) { Package packageDeclaration = f.getDeclaringClass().getPackage(); if (packageDeclaration != null) { XmlJavaTypeAdapters adapters = packageDeclaration.getAnnotation(XmlJavaTypeAdapters.class); if (adapters != null) { for (XmlJavaTypeAdapter candidate : adapters.value()) { if (candidate != null && candidate.type().equals(f.getType())) { adapter = candidate; break; } } } } } return adapter; }
static XmlJavaTypeAdapter getMethodXJTA(final Method m) { XmlJavaTypeAdapter adapter = m.getAnnotation(XmlJavaTypeAdapter.class); if (adapter == null) { Method setter = getSetter(m); if (setter != null) { adapter = setter.getAnnotation(XmlJavaTypeAdapter.class); } } if (adapter == null) { adapter = m.getReturnType().getAnnotation(XmlJavaTypeAdapter.class); } if (adapter == null) { Package packageDeclaration = m.getDeclaringClass().getPackage(); if (packageDeclaration != null) { XmlJavaTypeAdapters adapters = packageDeclaration.getAnnotation(XmlJavaTypeAdapters.class); if (adapters != null) { for (XmlJavaTypeAdapter candidate : adapters.value()) { if (candidate != null && candidate.type().equals(m.getGenericReturnType())) { adapter = candidate; break; } } } } } return adapter; }
/** * Find the type adapter for the specified JAXB property. * * @param jaxbProperty The JAXB property for which to find a type adapter. * @return The type adapter, or null if none was found. */ private XmlJavaTypeAdapter findTypeAdapter(PropertyDescriptor jaxbProperty) { XmlJavaTypeAdapter adapterInfo = jaxbProperty.getReadMethod().getAnnotation(XmlJavaTypeAdapter.class); if ((adapterInfo == null) && (jaxbProperty.getWriteMethod() != null)) { adapterInfo = jaxbProperty.getWriteMethod().getAnnotation(XmlJavaTypeAdapter.class); } if (adapterInfo == null) { Package pckg = jaxbProperty.getReadMethod().getDeclaringClass().getPackage(); Class<?> returnType = jaxbProperty.getReadMethod().getReturnType(); XmlJavaTypeAdapter possibleAdapterInfo = pckg.getAnnotation(XmlJavaTypeAdapter.class); if ((possibleAdapterInfo != null) && (returnType.equals(possibleAdapterInfo.type()))) { adapterInfo = possibleAdapterInfo; } else if (pckg.isAnnotationPresent(XmlJavaTypeAdapters.class)) { XmlJavaTypeAdapters adapters = pckg.getAnnotation(XmlJavaTypeAdapters.class); for (XmlJavaTypeAdapter possibility : adapters.value()) { if (returnType.equals(possibility.type())) { adapterInfo = possibility; } } } } return adapterInfo; }
/** * Find the type adapter for the specified JAXB property. * * @param jaxbProperty The JAXB property for which to find a type adapter. * @return The type adapter, or null if none was found. */ private XmlJavaTypeAdapter findTypeAdapter(PropertyDescriptor jaxbProperty) { XmlJavaTypeAdapter adapterInfo = jaxbProperty.getReadMethod().getAnnotation(XmlJavaTypeAdapter.class); if ((adapterInfo == null) && (jaxbProperty.getWriteMethod() != null)) { adapterInfo = jaxbProperty.getWriteMethod().getAnnotation(XmlJavaTypeAdapter.class); } if (adapterInfo == null) { Package pckg = jaxbProperty.getReadMethod().getDeclaringClass().getPackage(); Class<?> returnType = jaxbProperty.getReadMethod().getReturnType(); XmlJavaTypeAdapter possibleAdapterInfo = pckg.getAnnotation(XmlJavaTypeAdapter.class); if ((possibleAdapterInfo != null) && (returnType.equals(possibleAdapterInfo.type()))) { adapterInfo = possibleAdapterInfo; } else if (pckg.isAnnotationPresent(XmlJavaTypeAdapters.class)) { XmlJavaTypeAdapters adapters = pckg.getAnnotation(XmlJavaTypeAdapters.class); for (XmlJavaTypeAdapter possibility : adapters.value()) { if (returnType.equals(possibility.type())) { adapterInfo = possibility; } } } } return adapterInfo; }
/** * Find the type adapter for the specified JAXB property. * * @param jaxbProperty The JAXB property for which to find a type adapter. * @return The type adapter, or null if none was found. */ private XmlJavaTypeAdapter findTypeAdapter(PropertyDescriptor jaxbProperty) { XmlJavaTypeAdapter adapterInfo = jaxbProperty.getReadMethod().getAnnotation(XmlJavaTypeAdapter.class); if ((adapterInfo == null) && (jaxbProperty.getWriteMethod() != null)) { adapterInfo = jaxbProperty.getWriteMethod().getAnnotation(XmlJavaTypeAdapter.class); } if (adapterInfo == null) { Package pckg = jaxbProperty.getReadMethod().getDeclaringClass().getPackage(); Class<?> returnType = jaxbProperty.getReadMethod().getReturnType(); XmlJavaTypeAdapter possibleAdapterInfo = pckg.getAnnotation(XmlJavaTypeAdapter.class); if ((possibleAdapterInfo != null) && (returnType.equals(possibleAdapterInfo.type()))) { adapterInfo = possibleAdapterInfo; } else if (pckg.isAnnotationPresent(XmlJavaTypeAdapters.class)) { XmlJavaTypeAdapters adapters = pckg.getAnnotation(XmlJavaTypeAdapters.class); for (XmlJavaTypeAdapter possibility : adapters.value()) { if (returnType.equals(possibility.type())) { adapterInfo = possibility; } } } } return adapterInfo; }
/** * Introspect the @XmlJavaTypeAdapter and @XmlSeeAlso for an interface * @param cls * @return */ private static Set<Class<?>> findJAXBClassesByInterface(Class<?> cls) { if (!cls.isInterface()) { return Collections.emptySet(); } Set<Class<?>> jaxbClasses = new HashSet<Class<?>>(); Class<?> valueType = getValueType(cls); if (valueType != null) { jaxbClasses.add(valueType); } Class<?>[] others = getSeeAlso(cls); if (others != null) { jaxbClasses.addAll(Arrays.asList(others)); } Package pkg = cls.getPackage(); if (pkg != null) { XmlJavaTypeAdapters adapters = pkg.getAnnotation(XmlJavaTypeAdapters.class); if (adapters != null) { for (XmlJavaTypeAdapter a : adapters.value()) { jaxbClasses.add(getValueType(a)); } } } return jaxbClasses; }
/** * Introspect the @XmlJavaTypeAdapter and @XmlSeeAlso for an interface * @param cls * @return */ private static Set<Class<?>> findJAXBClassesByInterface(Class<?> cls) { if (!cls.isInterface()) { return Collections.emptySet(); } Set<Class<?>> jaxbClasses = new HashSet<Class<?>>(); Class<?> valueType = getValueType(cls); if (valueType != null) { jaxbClasses.add(valueType); } Class<?>[] others = getSeeAlso(cls); if (others != null) { jaxbClasses.addAll(Arrays.asList(others)); } Package pkg = cls.getPackage(); if (pkg != null) { XmlJavaTypeAdapters adapters = pkg.getAnnotation(XmlJavaTypeAdapters.class); if (adapters != null) { for (XmlJavaTypeAdapter a : adapters.value()) { jaxbClasses.add(getValueType(a)); } } } return jaxbClasses; }
for (XmlJavaTypeAdapter possibility : adapters.value()) { if (returnType.equals(possibility.type())) { adapterInfo = possibility;
for (XmlJavaTypeAdapter possibility : adapters.value()) { if (propertyType.equals(possibility.type())) { adapterInfo = possibility;
allAdaptedTypes.addAll(Arrays.asList(javaTypes.value()));
allAdaptedTypes.addAll(Arrays.asList(javaTypes.value()));
allAdaptedTypes.addAll(Arrays.asList(javaTypes.value()));
allAdaptedTypes.addAll(Arrays.asList(javaTypes.value()));
private void generateXmlJavaTypeAdapters(AnnotationVisitor av, XmlJavaTypeAdapters adapters) { AnnotationVisitor av1 = av.visitArray("value"); for (XmlJavaTypeAdapter adapter : adapters.value()) { AnnotationVisitor av2 = av1.visitAnnotation(null, "Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapter;"); generateXmlJavaTypeAdapter(av2, adapter); av2.visitEnd(); } av1.visitEnd(); } private void generateXmlJavaTypeAdapter(AnnotationVisitor av, XmlJavaTypeAdapter adapter) {
allAdaptedTypes.addAll(Arrays.asList(javaTypes.value()));