a = new Adapter<Type,Class>(xjta.value(),nav);
protected static Class<?> xmlAdapterValueType(Class<?> baseType, Annotation[] annotations) { Class<?> clazz = baseType; if (baseType.isAnnotationPresent(XmlJavaTypeAdapter.class)) { XmlJavaTypeAdapter xmlJavaTypeAdapter = FindAnnotation.findAnnotation(baseType, annotations, XmlJavaTypeAdapter.class); Class<? extends XmlAdapter> adapterClass = xmlJavaTypeAdapter.value(); ParameterizedType xmlAdapterType = ParameterizedType.class.cast(adapterClass.getGenericSuperclass()); Class<?> valueType = Types.getArgumentType(xmlAdapterType, 0); Class<?> boundType = Types.getArgumentType(xmlAdapterType, 1); if (boundType.isAssignableFrom(baseType)) { clazz = valueType; } } return clazz; }
@SuppressWarnings("unchecked") private XmlAdapter<Object,Object> findAdapterForClass(AnnotatedClass ac, boolean forSerialization) { /* As per [JACKSON-411], XmlJavaTypeAdapter should not be inherited from super-class. * It would still be nice to be able to use mix-ins; but unfortunately we seem to lose * knowledge of class that actually declared the annotation. Thus, we'll only accept * declaration from specific class itself. */ XmlJavaTypeAdapter adapterInfo = ac.getAnnotated().getAnnotation(XmlJavaTypeAdapter.class); if (adapterInfo != null) { // should we try caching this? @SuppressWarnings("rawtypes") Class<? extends XmlAdapter> cls = adapterInfo.value(); // true -> yes, force access if need be return ClassUtil.createInstance(cls, true); } return null; }
@SuppressWarnings("unchecked") private final XmlAdapter<Object,Object> checkAdapter(XmlJavaTypeAdapter adapterInfo, Class<?> typeNeeded, boolean forSerialization) { // if annotation has no type, it's applicable; if it has, must match Class<?> adaptedType = adapterInfo.type(); if (adaptedType == XmlJavaTypeAdapter.DEFAULT.class) { JavaType type = _typeFactory.constructType(adapterInfo.value()); JavaType[] params = _typeFactory.findTypeParameters(type, XmlAdapter.class); adaptedType = params[1].getRawClass(); } if (adaptedType.isAssignableFrom(typeNeeded)) { @SuppressWarnings("rawtypes") Class<? extends XmlAdapter> cls = adapterInfo.value(); // true -> yes, force access if need be return ClassUtil.createInstance(cls, true); } return null; }
@SuppressWarnings("unchecked") protected static XmlAdapterWrapper getXmlAdapter(Class<?> baseType, Annotation[] annotations) { if (baseType.isAnnotationPresent(XmlJavaTypeAdapter.class)) { XmlJavaTypeAdapter xmlJavaTypeAdapter = FindAnnotation.findAnnotation(baseType, annotations, XmlJavaTypeAdapter.class); Class<? extends XmlAdapter> adapterClass = xmlJavaTypeAdapter.value(); ParameterizedType xmlAdapterType = ParameterizedType.class.cast(adapterClass.getGenericSuperclass()); Class<?> boundType = Types.getArgumentType(xmlAdapterType, 1); if (boundType.isAssignableFrom(baseType)) { try { Class<?> valueType = Types.getArgumentType(xmlAdapterType, 0); return new XmlAdapterWrapper(adapterClass.newInstance(), valueType); } catch (Exception e) { throw new JAXBMarshalException(e); } } } return null; } }
private void generateXmlJavaTypeAdapter(AnnotationVisitor av, XmlJavaTypeAdapter adapter) { if (adapter.value() != null) { av.visit("value", getType(getClassCode(adapter.value()))); } if (adapter.type() != javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT.class) { av.visit("type", getType(getClassCode(adapter.type()))); } }
@Override public Class<?> call() throws Exception { return finalInfo.value(); } }, env);
@Override public Class<?> call() throws Exception { return finalInfo.value(); } }, env);
@Override public Class<?> call() throws Exception { return finalInfo.value(); } }, env);
@Override public Class<?> call() throws Exception { return finalInfo.value(); } }, env);
a = new Adapter<Type,Class>(xjta.value(),nav);
@Override public Class<?> call() throws Exception { return finalInfo.value(); } }, env);
@Override public Class<?> call() throws Exception { return finalInfo.value(); } }, env);
@SuppressWarnings("rawtypes") static XmlAdapter getXmlAdapter(XmlJavaTypeAdapter adapterAnnotation) throws InstantiationException, IllegalAccessException { return adapterAnnotation != null ? adapterAnnotation.value().newInstance() : null; }
@SuppressWarnings("unchecked") private XmlAdapter<Object,Object> findAdapterForClass(AnnotatedClass ac, boolean forSerialization) { XmlJavaTypeAdapter adapterInfo = ac.getAnnotated().getAnnotation(XmlJavaTypeAdapter.class); if (adapterInfo != null) { @SuppressWarnings("rawtypes") Class<? extends XmlAdapter> cls = adapterInfo.value(); return ClassUtil.createInstance(cls, true); } return null; } }
private void generateXmlJavaTypeAdapter(AnnotationVisitor av, XmlJavaTypeAdapter adapter) { if (adapter.value() != null) { av.visit("value", getType(getClassCode(adapter.value()))); } if (adapter.type() != javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT.class) { av.visit("type", getType(getClassCode(adapter.type()))); } }
@Override public JsonSerializer<?> findSerializer(Annotated am) { // replace JaxbUnknownAdapter as it breaks JSON marshaller for list and maps with wrapping serializer XmlJavaTypeAdapter adapterInfo = findAnnotation(XmlJavaTypeAdapter.class, am, true, false, false); if (adapterInfo != null && adapterInfo.value().isAssignableFrom(JaxbUnknownAdapter.class)) { if ( findAnnotation(JsonSerialize.class, am, true, false, false) != null ) { // .. unless there is also an explicitly specified serializer, in such case use the specified one: return super.findSerializer(am); } return new WrappingObjectSerializer(customObjectMapper); } return super.findSerializer(am); }
private void processPackageLevelAdapter(XmlJavaTypeAdapter next, TypeInfo info) { JavaClass adapterClass = helper.getJavaClass(next.value()); JavaClass boundType = helper.getJavaClass(next.type()); if (boundType != null) { info.addPackageLevelAdapterClass(adapterClass, boundType); } else { getLogger().logWarning(JAXBMetadataLogger.INVALID_BOUND_TYPE, new Object[] { null, adapterClass }); } }
private void processPackageLevelAdapter(XmlJavaTypeAdapter next, TypeInfo info) { JavaClass adapterClass = helper.getJavaClass(next.value()); JavaClass boundType = helper.getJavaClass(next.type()); if (boundType != null) { info.addPackageLevelAdapterClass(adapterClass, boundType); } else { getLogger().logWarning(JAXBMetadataLogger.INVALID_BOUND_TYPE, new Object[] { boundType, adapterClass }); } }
private void checkForJAXBAnnotations(MessagePartInfo mpi, SchemaCollection schemaCollection, String ns) { Annotation[] anns = (Annotation[])mpi.getProperty("parameter.annotations"); JAXBContextProxy ctx = JAXBUtils.createJAXBContextProxy(context, schemaCollection, ns); XmlJavaTypeAdapter jta = JAXBSchemaInitializer.findFromTypeAdapter(ctx, mpi.getTypeClass(), anns); if (jta != null) { JAXBBeanInfo jtaBeanInfo = JAXBSchemaInitializer.findFromTypeAdapter(ctx, jta.value()); JAXBBeanInfo beanInfo = JAXBSchemaInitializer.getBeanInfo(ctx, mpi.getTypeClass()); if (jtaBeanInfo != beanInfo) { mpi.setProperty("parameter.annotations", anns); mpi.setProperty("honor.jaxb.annotations", Boolean.TRUE); } } }