@XmlTransient
出力XMLファイルにいくつかの文字列を隠すために使用しています。マーシャリング中に正常に動作し、XML は問題ありません。
ただし、XML を非整列化すると、@XmlTransient
マークされた値が null として表示されます。
1494 次
1 に答える
1
何@XmlTransient
が
@XmlTransient
プロパティをマップされていないものとしてマークし、マーシャリングとアンマーシャリングの両方から除外します。
あなたにできること
マーシャリングから値を除外したいだけの場合は、XmlAdapter
XmlAdapter (文字列アダプター)
はXmlAdapter
常に""
マーシャル操作を返し、JAXB 実装は空の要素を返します。EclipseLink MOXyを JAXB 実装として使用している場合は、null を返してノードを完全に削除できます ( http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.htmlを参照) 。 .
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class StringAdapter extends XmlAdapter<String, String> {
@Override
public String marshal(String string) throws Exception {
return null;
}
@Override
public String unmarshal(String string) throws Exception {
return string;
}
}
人
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name="Person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
String name;
String address;
@XmlJavaTypeAdapter(StringAdapter.class)
String password;
}
入力.xml
<Person>
<name> some name </name>
<password> some password </password>
<address> some address </address>
</Person>
デモ
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum14231799/input.xml");
Person person = (Person) unmarshaller.unmarshal(xml);
System.out.println(person.password);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(person, System.out);
}
}
出力
some password
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Person>
<name> some name </name>
<address> some address </address>
<password></password>
</Person>
于 2013-01-09T10:46:11.437 に答える