Il XmlAdapter meccanismo in JAXB ( JSR-222 ) permette una classe unmappable per essere convertito in un mappabile uno. Un XmlAdapter possono essere registrati con i XmlJavaTypeAdapter @ al, campo della proprietà, tipo o livello di pacchetto. Questo post si concentrerà sulla portata delle XmlAdapterquando registrato a livello di pacchetto.
Pacchetto 1 - xmladapter.bar
package-info
Quando un XmlAdapter è registrato a livello di pacchetto deve includere il tipo di parametro. Il tipo diparametro specifica la classe Java che questo XmlAdapter verrà applicato. Per questo pacchetto (xmladapter.bar ) si precisano un XmlAdapter ( StringAdapter ) che verranno applicate a tutti i campi / proprietà di tipo String all'interno di questo pacchetto.
Pacchetto 1 - xmladapter.bar
package-info
Quando un XmlAdapter è registrato a livello di pacchetto deve includere il tipo di parametro. Il tipo diparametro specifica la classe Java che questo XmlAdapter verrà applicato. Per questo pacchetto (xmladapter.bar ) si precisano un XmlAdapter ( StringAdapter ) che verranno applicate a tutti i campi / proprietà di tipo String all'interno di questo pacchetto.
1.
@ XmlJavaTypeAdapters
({
2.
@ XmlJavaTypeAdapter
(valore = StringAdapter.
class
, type = String.
class
)
3.
})
4.
pacchetto
xmladapter.bar;
5.
6.
importazione
javax.xml.bind.annotation.adapters *.;
StringAdapter
nostri XmlAdapter si limiterà a convertire tutte le istanze di String in maiuscolo quando marshalling:
. 01
package
xmladapter.bar;
02.
03.
importazione
javax.xml.bind.annotation.adapters.XmlAdapter;
04.
05.
pubblico
class
StringAdapter
extends
XmlAdapter <String, <stringa {
06.
07.
@ Override
08.
pubblico
unmarshal String (String v)
throws
Exception {
09.
ritorno
v;
10.
}
11.
12.
@ Override
13.
pubblico
String marshal (String v)
throws
Exception {
14.
se
(
nullo
== v) {
15.
ritorno
v;
16.
}
17.
ritorno
v.toUpperCase ();
18.
}
19.
20.
}
Bar
Bar rappresenta un POJO in questo pacchetto con una proprietà di ( nome ) di tipo String :
. 01
package
xmladapter.bar;
02.
03.
pubblico
class
Bar {
04.
05.
private
String name;
06.
07.
pubblico
getName String () {
08.
return
nome;
09.
}
10.
11.
pubblico
void
setName (String name) {
12.
questo
name = nome.;
13.
}
14.
15.
}
Pacchetto 2 - xmladapter.foo
Foo
Foo rappresenta un oggetto di dominio con una proprietà di tipo String che esiste in un pacchetto differente ( xmladapter.foo ). Le XmlAdapter abbiamo registrato per la xmladapter.bar pacchetto non si applica ai String campi / proprietà di questa classe:
. 01
package
xmladapter.foo;
02.
03.
import
javax.xml.bind.annotation *.;
. 04
import
xmladapter.bar.Bar;
05.
06.
@ XmlRootElement
07.
@ XmlType
(propOrder = {
"name"
,
"bar"
})
08.
pubblico
class
Foo {
09.
10.
private
String name;
11.
private
bar Bar;
12.
13.
pubblico
getName String () {
14.
return
nome;
15.
}
16.
17.
pubblico
void
setName (String name) {
18.
questo
name = nome.;
19.
}
20.
21.
pubblico
getBar Bar () {
22.
ritorno
bar;
23.
}
24.
25.
pubblico
void
setBar (Bar bar) {
26.
questo
bar = bar.;
27.
}
28.
29.
}
Demo
Il seguente codice creare istanze sia di Foo e Bar e il maresciallo li XML. Si noti come i valori impostati innome di proprietà sia per Foo e Bar sono minuscole:
01.
pacchetto
xmladapter;
02.
03.
import
javax.xml.bind *.;
. 04
import
xmladapter.bar.Bar;
05.
import
xmladapter.foo.Foo;
06.
07.
pubblico
class
{Demo
08.
09.
pubblici
static
void
main (String [] args)
throws
Exception {
10.
JAXBContext jc = JAXBContext.newInstance (Foo.
classe
, Bar.
classe
);
11.
Marshaller marshaller = jc.createMarshaller ();
12.
marshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT,
true
);
13.
14.
Foo foo =
nuovo
Foo ();
15.
foo.setName (
"foo"
);
16.
17.
bar Bar =
nuovo
Bar ();
18.
bar.setName (
"bar"
);
19.
foo.setBar (bar);
20.
21.
marshaller.marshal (foo, System.out);
22.
}
23.
24.
}
Output
Notate come il valore del nome dell'elemento all'interno bar è stato convertito in maiuscolo (linea 5), ma il nome elemento all'interno di foo non ha (linea 3):
1.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
2.
<
foo
>
3.
<
nome
> foo </
name
>
4.
<
bar
>
5.
<
nome
> BAR </
name
>
6.
</
bar
>
Nessun commento:
Posta un commento
Nota. Solo i membri di questo blog possono postare un commento.