Вы можете сделать следующее:
Вариант использования № 1 - Объект не маршала, основанный на элементе имени
Если человек является корневым объектом
Если Person
является корневым объектом, вы можете сделать следующее, как предложено JB Nizet в комментариях к этому вопросу.
if (!"test10".equals(person.getName()) {
marshaller.marshal(person);
}
Если лицо является ссылочным объектом
Если Person
не является корневым объектом, тогда вы можете использовать XmlAdapter
для этого варианта использования. Это будет выглядеть примерно так:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class PersonAdapter extends XmlAdapter<Person, Person> {
@Override
public Person unmarshal(Person person) throws Exception {
return person;
}
@Override
public Person marshal(Person person) throws Exception {
if(mull == person || "test10".equals(person.getName()) {
return null;
}
return person;
}
}
XmlAdapter
указывается с помощью аннотации @XmlJavaTypeAdapter
. Эту аннотацию можно настроить на уровне поля / свойства, типа и пакета. Для примеров см .:
Вариант использования № 2 - элемент имени не маршала, основанный на его значении
Если вы просто хотите избежать маршалинга элемента name на основе его значения, тогда вы снова можете использовать XmlAdapter
:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class NameAdapter extends XmlAdapter<String, String> {
@Override
public String unmarshal(String string) throws Exception {
return string;
}
@Override
public String marshal(String string) throws Exception {
if("test10".equals(string) {
return null;
}
return string;
}
}
Ваш класс Person
будет выглядеть так:
@XmlRootElement(name = "publisher")
class Person
{
@XmlElement(required = true)
int id;
@XmlElement(required = true)
@XmlJavaTypeAdapter(NameAdapter.class)
String name;
}