Hi!

Unfortunately none of the approaches worked... XmlBeanSerializerModifier 
has a bug, and does not use the provided modifier, even if I override the 
method you mentioned.
Could you help me where to report the bug?
Also where can I find some resources on the architecture of the Jackson 
project?

BR, Zsolt

2017. március 23., csütörtök 6:45:18 UTC+1 időpontban Tatu Saloranta a 
következőt írta:
>
> On Wed, Mar 22, 2017 at 10:24 PM, Zsolt Balanyi <zsolt....@gmail.com 
> <javascript:>> wrote: 
> > Hi! 
> > 
> > Of course my code is related to XML: 
>
> Right, I just meant it regarding general data-binding functionality. 
> Your code can certainly use its knowledge as necessary. 
>
> > 
> >         ObjectMapper om = new XmlMapper(); 
> >         om.enable(SerializationFeature.INDENT_OUTPUT); 
> >         om.registerModule(new JacksonXmlModule() { 
> >             @Override 
> >             public void setupModule(SetupContext context) { 
> >                 super.setupModule(context); 
> >                 context.addBeanSerializerModifier(new 
> > UIElementSerializerModifier()); 
> >             } 
> >         }); 
> > 
> > public class UIElementSerializerModifier extends 
> XmlBeanSerializerModifier { 
> >     @Override 
> >     public JsonSerializer<?> modifySerializer(SerializationConfig 
> config, 
> > BeanDescription beanDesc, JsonSerializer<?> serializer) { 
> >         if (UIElement.class.isAssignableFrom(beanDesc.getBeanClass())) { 
> >             System.out.println(serializer.getClass().getName()); 
> >             return new BSerializer((BeanSerializerBase) serializer); 
> >         } 
> >         return serializer; 
> >     } 
> > } 
> > 
> > public class BSerializer extends XmlBeanSerializer { 
> > 
> >     public BSerializer(BeanSerializerBase src) { 
> >         super(src); 
> >     } 
> > 
> >     @Override 
> >     public void serialize(Object bean, JsonGenerator jgen, 
> > SerializerProvider provider) throws IOException { 
> >       // The breakpoint on next line is never hit!!! 
> >       super.serialize(bean, jgen, provider); 
> >     } 
> > } 
> > 
> > I create an object that extends UIElement, the appropriate BSerializer 
> is 
> > created, but never called. 
> > Is this a bug in jackson-dataformat-xml, or I'm doing wrong something? 
>
> One possibility is that if the type uses polymorphic handling, method 
> called is actually 
>
>      public void serializeWithType(T value, JsonGenerator g, 
> SerializerProvider p, 
>           TypeSerializer ts); 
>
> and you may need to override that as well. 
>
> -+ Tatu +- 
>
> > 
> > BR, Zsolt 
> > 
> > 2017. március 22., szerda 23:21:03 UTC+1 időpontban Tatu Saloranta a 
> > következőt írta: 
> >> 
> >> On Wed, Mar 22, 2017 at 1:31 AM, Zsolt Balanyi <zsolt....@gmail.com> 
> >> wrote: 
> >> > Hi! 
> >> > 
> >> > The tag name can be easily renamed, by 
> >> > 
> >> >         if (gen instanceof ToXmlGenerator) { 
> >> >             ((ToXmlGenerator)gen).setNextName(new 
> >> > QName(bean.getClass().getSimpleName())); 
> >> >         } 
> >> >         doNormalSerialization(); 
> >> 
> >> Yes, but that does not mean much when it's `jackson-databind` and its 
> >> type handling code which can not call such method 
> >> (it is XML specific and not needed for other formats). 
> >> 
> >> > The only problem is, that I need to serialize all other fields, which 
> I 
> >> > dont 
> >> > know how... That is why I would need to get the method to perform the 
> >> > serialization, as the default serializer would. 
> >> > Also, the BeanSerializerModifier approach did not work. 
> >> > The new serializer is only created, but not called during the 
> >> > serialization. 
> >> > Maybe it has to something with the fact that I register it for an 
> >> > abstract 
> >> > class, and the concrete implementors still use their defaults? 
> >> 
> >> BeanSerializerModifier is a callback, but yes, result would be bound 
> >> for whatever type it was called for. 
> >> 
> >> -+ Tatu +- 
> >> 
> >> > 
> >> > BR Zsolt 
> >> > 
> >> > 
> >> > 
> >> > 2017. március 22., szerda 5:38:56 UTC+1 időpontban Tatu Saloranta a 
> >> > következőt írta: 
> >> >> 
> >> >> On Tue, Mar 21, 2017 at 12:16 AM, Zsolt Balanyi <zsolt....@gmail.com> 
>
> >> >> wrote: 
> >> >> > Hi! 
> >> >> > 
> >> >> > That was one of my first attempts :) 
> >> >> > 
> >> >> > <Page> 
> >> >> >   <uiElement> 
> >> >> >     <StackLayout> 
> >> >> >       <uiElements> 
> >> >> >         <Label text="some text"/> 
> >> >> >       </uiElements> 
> >> >> >       <uiElements> 
> >> >> >         <Image url="mypageUrl"/> 
> >> >> >       </uiElements> 
> >> >> >     </StackLayout> 
> >> >> >   </uiElement> 
> >> >> > </Page> 
> >> >> > 
> >> >> > The question is how could I ommit the uiElement nodes? 
> >> >> 
> >> >> <uiElement> itself matches property `uiElement` so that can not be 
> >> >> removed. 
> >> >> Or, if expectation was that property name would be replaced by type 
> id 
> >> >> that is not something Jackson supports or will be able to support -- 
> >> >> it may make sense from XML viewpoint, but would not work with JSON 
> or 
> >> >> any other supported dataformat. XML is bit of an outlier as its 
> >> >> structural model is the most difficult one to support, of formats 
> >> >> supported. 
> >> >> 
> >> >> -+ Tatu +- 
> >> >> 
> >> >> > 
> >> >> > BR, Zsolt 
> >> >> > 
> >> >> > 2017. március 20., hétfő 20:16:38 UTC+1 időpontban Tatu Saloranta 
> a 
> >> >> > következőt írta: 
> >> >> >> 
> >> >> >> Have you tried choice of `JsonTypeInfo.As.WRAPPER_OBJECT`? 
> >> >> >> That does add type id as property-name "wrapper" in JSON, and 
> should 
> >> >> >> work quite similarly with XML. 
> >> >> >> The main problem with XML is often, however, that the root value 
> >> >> >> requires additional extra XML element. 
> >> >> >> 
> >> >> >> -+ Tatu +- 
> >> >> >> 
> >> >> >> On Mon, Mar 20, 2017 at 11:42 AM, Zsolt Balanyi 
> >> >> >> <zsolt....@gmail.com> 
> >> >> >> wrote: 
> >> >> >> > Hi! 
> >> >> >> > 
> >> >> >> > public class Page { 
> >> >> >> >    public UIElement uiElement; 
> >> >> >> > } 
> >> >> >> > 
> >> >> >> > @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = 
> >> >> >> > JsonTypeInfo.As.PROPERTY, property = "type") 
> >> >> >> > public abstract class UIElement { 
> >> >> >> > } 
> >> >> >> > 
> >> >> >> > public class StackLayout extends UIElement { 
> >> >> >> >     public List<UIElement> uiElements = new ArrayList<>(); 
> >> >> >> > } 
> >> >> >> > 
> >> >> >> > public class Label extends UIElement { 
> >> >> >> >     @JacksonXmlProperty(isAttribute=true) 
> >> >> >> >     public String text; 
> >> >> >> > } 
> >> >> >> > 
> >> >> >> > So basically I have  a Page, that contains a  StackLayout that 
> >> >> >> > contains 
> >> >> >> > a 
> >> >> >> > Label and an Image. 
> >> >> >> > It would solve the problem, if the JsonTypeInfo could put the 
> type 
> >> >> >> > name 
> >> >> >> > to 
> >> >> >> > the element name... 
> >> >> >> > 
> >> >> >> > BR, Zsolt 
> >> >> >> > 
> >> >> >> > 2017. március 20., hétfő 19:22:10 UTC+1 időpontban Tatu 
> Saloranta 
> >> >> >> > a 
> >> >> >> > következőt írta: 
> >> >> >> >> 
> >> >> >> >> What is the POJO you are serializing? 
> >> >> >> >> 
> >> >> >> >> -+ Tatu +- 
> >> >> >> >> 
> >> >> >> >> 
> >> >> >> >> On Mon, Mar 20, 2017 at 5:11 AM, Zsolt Balanyi 
> >> >> >> >> <zsolt....@gmail.com> 
> >> >> >> >> wrote: 
> >> >> >> >> > Hi! 
> >> >> >> >> > 
> >> >> >> >> > I have a structure that outputs this: 
> >> >> >> >> > 
> >> >> >> >> > <Page> 
> >> >> >> >> >   <uiElement type="StackLayout"> 
> >> >> >> >> >     <uiElements type="Label" text="some text"/> 
> >> >> >> >> >     <uiElements type="Image" url="mypageUrl"/> 
> >> >> >> >> >   </uiElement> 
> >> >> >> >> > </Page> 
> >> >> >> >> > 
> >> >> >> >> > I use @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, 
> >> >> >> >> > include=As.PROPERTY, 
> >> >> >> >> > property="type") on the common base class. 
> >> >> >> >> > How could I get the following output: 
> >> >> >> >> > 
> >> >> >> >> > <Page> 
> >> >> >> >> >   <StackLayout> 
> >> >> >> >> >     <Label text="some text"/> 
> >> >> >> >> >     <Image url="mypageUrl"/> 
> >> >> >> >> >   </StackLayout> 
> >> >> >> >> > </Page> 
> >> >> >> >> > 
> >> >> >> >> > It does not matter, if it can not be deserialized by 
> Jackson, 
> >> >> >> >> > it 
> >> >> >> >> > is 
> >> >> >> >> > read 
> >> >> >> >> > by 
> >> >> >> >> > another system, that requires this structure. 
> >> >> >> >> > 
> >> >> >> >> > BR, Zsolt 
> >> >> >> >> > 
> >> >> >> >> > -- 
> >> >> >> >> > You received this message because you are subscribed to the 
> >> >> >> >> > Google 
> >> >> >> >> > Groups 
> >> >> >> >> > "jackson-user" group. 
> >> >> >> >> > To unsubscribe from this group and stop receiving emails 
> from 
> >> >> >> >> > it, 
> >> >> >> >> > send 
> >> >> >> >> > an 
> >> >> >> >> > email to jackson-user...@googlegroups.com. 
> >> >> >> >> > To post to this group, send email to 
> >> >> >> >> > jackso...@googlegroups.com. 
> >> >> >> >> > For more options, visit https://groups.google.com/d/optout. 
> >> >> >> > 
> >> >> >> > -- 
> >> >> >> > You received this message because you are subscribed to the 
> Google 
> >> >> >> > Groups 
> >> >> >> > "jackson-user" group. 
> >> >> >> > To unsubscribe from this group and stop receiving emails from 
> it, 
> >> >> >> > send 
> >> >> >> > an 
> >> >> >> > email to jackson-user...@googlegroups.com. 
> >> >> >> > To post to this group, send email to jackso...@googlegroups.com. 
>
> >> >> >> > For more options, visit https://groups.google.com/d/optout. 
> >> >> > 
> >> >> > -- 
> >> >> > You received this message because you are subscribed to the Google 
> >> >> > Groups 
> >> >> > "jackson-user" group. 
> >> >> > To unsubscribe from this group and stop receiving emails from it, 
> >> >> > send 
> >> >> > an 
> >> >> > email to jackson-user...@googlegroups.com. 
> >> >> > To post to this group, send email to jackso...@googlegroups.com. 
> >> >> > For more options, visit https://groups.google.com/d/optout. 
> >> > 
> >> > -- 
> >> > You received this message because you are subscribed to the Google 
> >> > Groups 
> >> > "jackson-user" group. 
> >> > To unsubscribe from this group and stop receiving emails from it, 
> send 
> >> > an 
> >> > email to jackson-user...@googlegroups.com. 
> >> > To post to this group, send email to jackso...@googlegroups.com. 
> >> > For more options, visit https://groups.google.com/d/optout. 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "jackson-user" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to jackson-user...@googlegroups.com <javascript:>. 
> > To post to this group, send email to jackso...@googlegroups.com 
> <javascript:>. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jackson-user+unsubscr...@googlegroups.com.
To post to this group, send email to jackson-user@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to