answer given by npe iyi bir tanesidir ve null
'un nasıl temsil edildiğini belirtmek de önerimdir.
@XmlElement(nillable=true)
public String getLabel() {
return label;
}
o zaman bir XmlAdapter
kullanabilirsiniz XML gösterimini değiştirmek için istemiyorsanız: (Binding to JSON & XML - Handling Null bakınız) olarak xsi:nil
mülkünüzü açıklama isteyecektir sıralıyor sahip olmak
EmptyStringAdapter
package forum10869748;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class EmptyStringAdapter extends XmlAdapter<String, String> {
@Override
public String unmarshal(String v) throws Exception {
if("".equals(v)) {
return null;
}
return v;
}
@Override
public String marshal(String v) throws Exception {
return v;
}
}
Foo
@XmlJavaTypeAdapter
ek açıklamasını kullanarak bir XmlAdapter
başvurusunda bulunabilirsiniz. Eğer bu XmlAdapter
'un tüm Strings'e uygulanmasını isterseniz, bunu paket seviyesine kaydedebilirsiniz (bkz. JAXB and Package Level XmlAdapters).
package forum10869748;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Foo {
private String label;
@XmlJavaTypeAdapter(EmptyStringAdapter.class)
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
}
Deneme
package forum10869748;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum10869748/input.xml");
Foo foo = (Foo) unmarshaller.unmarshal(xml);
System.out.println(foo.getLabel());
}
}
input.xml
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<label></label>
</foo>
Çıkış
null
Niçin daha iyi bir seçenek olur? Dize boş olup olmadığını kontrol etmek yerine - NPE'den kaçınmak için yapmanız gereken - çağrıdan sonra, boş olup olmadığını kontrol edin ve işiniz bitti. –