Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@JsonAppend causes 'IllegalStateException Unsupported annotated member' with JaxbAnnotationModule #31

Closed
asodja opened this issue Sep 21, 2017 · 0 comments

Comments

@asodja
Copy link

asodja commented Sep 21, 2017

It seems that using JaxbAnnotationModule causes some problems when using @JsonAppend feature. Example that reproduce the issue:

@Test
public void testJsonAppendWithJaxb() throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JaxbAnnotationModule());
    String json = mapper.writeValueAsString(new Pojo("foo"));
    assertEquals("{\"name\":\"foo\",\"virtual\":\"bar\"}", json);
}

@JsonAppend(props = @JsonAppend.Prop(name = "virtual", value = MyVirtualPropertyWriter.class))
public static class Pojo {

    private final String name;

    public Pojo(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

public static class MyVirtualPropertyWriter extends VirtualBeanPropertyWriter {
    public MyVirtualPropertyWriter() {
    }

    protected MyVirtualPropertyWriter(BeanPropertyDefinition propDef, Annotations contextAnnotations,
            JavaType declaredType) {
        super(propDef, contextAnnotations, declaredType);
    }

    @Override
    protected Object value(Object bean, JsonGenerator jgen, SerializerProvider prov) throws Exception {
        return "bar";
    }

    @Override
    public VirtualBeanPropertyWriter withConfig(MapperConfig<?> config, AnnotatedClass declaringClass,
            BeanPropertyDefinition propDef, JavaType type) {

        return new MyVirtualPropertyWriter(propDef, declaringClass.getAnnotations(), type);
    }
}

Throws exception:

java.lang.IllegalStateException: Unsupported annotated member: com.fasterxml.jackson.databind.introspect.VirtualAnnotatedMember

	at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.findAnnotation(JaxbAnnotationIntrospector.java:1363)
	at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.findWrapperName(JaxbAnnotationIntrospector.java:453)
	at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findWrapperName(AnnotationIntrospectorPair.java:435)
	at com.fasterxml.jackson.databind.util.SimpleBeanPropertyDefinition.getWrapperName(SimpleBeanPropertyDefinition.java:215)
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.<init>(BeanPropertyWriter.java:215)
	at com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter.<init>(VirtualBeanPropertyWriter.java:57)
	at com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter.<init>(VirtualBeanPropertyWriter.java:35)
	at com.test.TestVirtualProperties$MyVirtualPropertyWriter.<init>(TestVirtualProperties.java:52)
	at com.test.TestVirtualProperties$MyVirtualPropertyWriter.withConfig(TestVirtualProperties.java:64)
	at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector._constructVirtualProperty(JacksonAnnotationIntrospector.java:911)
	at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.findAndAddVirtualProperties(JacksonAnnotationIntrospector.java:852)
	at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findAndAddVirtualProperties(AnnotationIntrospectorPair.java:546)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanSerializer(BeanSerializerFactory.java:407)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanSerializer(BeanSerializerFactory.java:282)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:234)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:168)
	at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1308)
	at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1258)
	at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:500)
	at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:698)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:270)
	at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3681)
	at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3057)
	at com.test.TestVirtualProperties.testJsonAppendWithJaxb(TestVirtualProperties.java:28) <22 internal calls>

Also changing primary and secondary annotation introspector with:

AnnotationIntrospector jacksonAnnIntro = new JacksonAnnotationIntrospector();
AnnotationIntrospector jaxbAnnIntro = new JaxbAnnotationIntrospector();
mapper.setAnnotationIntrospector(AnnotationIntrospector.pair(jacksonAnnIntro, jaxbAnnIntro));

and it does not work.

I tested it with 2.9.1 and 2.8.8.

@cowtowncoder cowtowncoder changed the title @JsonAppend causes 'java.lang.IllegalStateException: Unsupported annotated member' with JaxbAnnotationModule @JsonAppend causes 'IllegalStateException Unsupported annotated member' with JaxbAnnotationModule Oct 20, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants