Giriş
Şu satırı dahil ederiz.
JAXB normalde unmarshal işleminde no-arg constructor'ı çağırır. Bu sınıfı unmarshal ederken kullanlacak factory metodunu belirtmek için şöyle yaparız.
xsi:type alanına değer atamak için kullanılır.
Örnek
Elimizde şöyle bir kod olsun.
Açıklaması şöyle.
Şöyle yaparız. Nesneyi XML olarak yazarken alanların sırasını belirtir.
Property yani getter/setter olarak erişmek istersek hiçbir şey yazmayız.
Örnek
Şöyle yaparız.
Şu satırı dahil ederiz.
import javax.xml.bind.annotation.XmlType;
factoryClass AlanıJAXB normalde unmarshal işleminde no-arg constructor'ı çağırır. Bu sınıfı unmarshal ederken kullanlacak factory metodunu belirtmek için şöyle yaparız.
@XmlType(factoryClass=FooFactory.class, factoryMethod="createFoo")
public class Foo {
...
}
Factory sınıfı şöyledir. Böylece nesneye bazı parametreler verebiliriz.public class FooFactory {
public Foo createFoo(){
return new Foo(...);
}
}
name Alanıxsi:type alanına değer atamak için kullanılır.
Örnek
Elimizde şöyle bir kod olsun.
@XmlType(name="some_item")
public class Resource {
}
Şöyle yaparız.Resource resource = new Resource();
JAXBElement<Object> jaxbElement = new JAXBElement<Object>(QName.valueOf("resource"),
Object.class, resource);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
Çıktı olarak şunu alırız.<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="some_item"/>
propOrder AlanıAçıklaması şöyle.
The order in which Java reflection returns the list of fields/properties is not guaranteed. This is why JAXB implementations do not use it to determine element order.Örnek
Şöyle yaparız. Nesneyi XML olarak yazarken alanların sırasını belirtir.
@XmlType (propOrder={"prop1","prop2",..."propN"})
Nesnenin özelliğine field yani alan olarak erişmek istersek @XmlAccessorType(XmlAccessType.FIELD) yaparız.Property yani getter/setter olarak erişmek istersek hiçbir şey yazmayız.
Örnek
Şöyle yaparız.
@XmlType(propOrder ={"setting", "subsystems"})
@XmlAccessorType(XmlAccessType.FIELD)
public class ProfileImpl implements Profile
{
@XmlAttribute
private String setting;
@XmlElementWrapper(name = "subsystems")
@XmlElement(name = "subsystem")
private List<SubsystemImpl> subsystems;
...
}
Hiç yorum yok:
Yorum Gönder