java - JAXB what should be returned from `beforeMarshal(Marshaller)` method? -
first of all, i'm not talking marshaller#listener. i'm talking class defined event callbacks.
can tell me should returned boolean beforemarshal(marshaller) method?
/** * apidocs method? * should return this? */ boolean beforemarshal(marshaller marshaller); i mean, anyway, use method converting jpa's long @id jaxb's string @xmlid with jaxb-ri , without moxy.
[edited] void version seems working though. documentation problem?
short answer
the boolean return type documentation error. return type should void.
long answer
i mean, anyway, use method converting jpa's long @id jaxb's string @xmlid
you use eclipselink jaxb (moxy) not have restriction field/property annotated @xmlid of type string.
with jaxb-ri , without moxy.
you use xmladapter map support use case:
idadapter
this xmladapter converts long value string value meet requirements of @xmlid annotation.
package forum9629948; import javax.xml.bind.datatypeconverter; import javax.xml.bind.annotation.adapters.xmladapter; public class idadapter extends xmladapter<string, long> { @override public long unmarshal(string string) throws exception { return datatypeconverter.parselong(string); } @override public string marshal(long value) throws exception { return datatypeconverter.printlong(value); } } b
the @xmljavatypeadapter annotation used specify xmladapter:
package forum9629948; import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.adapters.xmljavatypeadapter; @xmlaccessortype(xmlaccesstype.field) public class b { @xmlattribute @xmlid @xmljavatypeadapter(idadapter.class) private long id; } a
package forum9629948; import javax.xml.bind.annotation.*; @xmlrootelement @xmlaccessortype(xmlaccesstype.field) public class { private b b; private c c; } c
package forum9629948; import javax.xml.bind.annotation.*; @xmlaccessortype(xmlaccesstype.field)public class c { @xmlattribute @xmlidref private b b; } demo
package forum9629948; import java.io.file; import javax.xml.bind.*; public class demo { public static void main(string[] args) throws exception { jaxbcontext jc = jaxbcontext.newinstance(a.class); file xml = new file("src/forum9629948/input.xml"); unmarshaller unmarshaller = jc.createunmarshaller(); a = (a) unmarshaller.unmarshal(xml); marshaller marshaller = jc.createmarshaller(); marshaller.setproperty(marshaller.jaxb_formatted_output, true); marshaller.marshal(a, system.out); } } input/output
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <a> <b id="123"/> <c b="123"/> </a>
Comments
Post a Comment