1

@XmlTransient出力XMLファイルにいくつかの文字列を隠すために使用しています。マーシャリング中に正常に動作し、XML は問題ありません。
ただし、XML を非整列化すると、@XmlTransientマークされた値が null として表示されます。

4

1 に答える 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 に答える