On Thu, Mar 23, 2017 at 11:34 AM, Zsolt Balanyi <zsolt.bala...@gmail.com> wrote:
> 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?

If you can reproduce this without XML backend, it'd make sense to
report against `jackson-databind`.
If this is truly XML specific, then `jackson-dataformat-xml`. I can
help troubleshoot the problem either way, but it would be good to know
if it is XML specific or not.

> Also where can I find some resources on the architecture of the Jackson
> project?

I don't think there is much. I have blogged at

http://cowtowncoder.com/blog/blog.html (older)
https://medium.com/@cowtowncoder (newer)

and jackson-docs repo has some links

https://github.com/FasterXML/jackson-docs/

but most documentation refers to public API developers are most likely to use.

-+ Tatu +-

>
> 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>
>> 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.
>> > 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+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.

-- 
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