2013-01-09 12 views

回答

1

什麼@XmlTransient是否

@XmlTransient所以從兩個編組和解組排除資源標記爲未映射。


你可以做

如果你只是想從編組你可以考慮使用XmlAdapter

XmlAdapter排除值( StringAdapter)

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; 

} 

的input.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> 
+0

在編組中StringAdapter馬歇爾方法被調用。但是,雖然未調用unmarshal方法未被調用。可能是什麼問題。 –

+0

@AnandB - 只有在對應於該屬性的XML中有內容時纔會調用它。查看期望的內容的最簡單方法是解鎖用於元帥操作的屬性並生成示例文檔。 –

+0

你是否建議我應該在StringAdapter的元帥方法中返回String而不是null,並驗證輸出xml中的內容 –