简体   繁体   English

使用JAXB问题对布尔值进行编组

[英]Marshalling of boolean values using JAXB issue

I have a boolean attribute in a java class private boolean isCurrent; 我在java类中有一个布尔属性private boolean isCurrent; Now in xml it gets marshalled into <current>false</current> . 现在在xml中将其编组为<current>false</current> Now the field i have is only isCurrent . 现在我所拥有的领域只是isCurrent How do i preserve the name isCurrent as it is in XML?. 如何保留XML中的isCurrent名称? Though i know it is not related to getters & setter s of the boolean just for information, they are named as setCurrent & isCurrent taking the defaults of eclipse IDE. 尽管我知道它与布尔型的getter和setter无关,只是为了提供信息,但它们使用eclipse IDE的默认设置命名为setCurrent和isCurrent。

A presence of an empty tag could be mapped to a boolean. 空标记的存在可以映射为布尔值。 For eg <isPresent/> Use an XmlAdaptor: 例如, <isPresent/>使用XmlAdaptor:

package com.example.xml.adaptor;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class BooleanToEmptyObjectAdapter extends XmlAdapter<EmptyObject, Boolean> {
    @Override
    public EmptyObject marshal(final Boolean v) {
        return v != null && v ? new EmptyObject() : null;
    }

    @Override
    public Boolean unmarshal(final EmptyObject v) {
        return true;
    }
}

And a dummy object for it to serialize: 还有一个虚拟对象要序列化:

package com.example.xml.adaptor;

public class EmptyObject {
    // EMPTY
}

Then in your object, use a Boolean (not a boolean) field: 然后在您的对象中,使用布尔值(而非布尔值)字段:

@XmlRootElement(name = "FooElement")
public class Foo {

    @XmlElement()
    @XmlJavaTypeAdapter(BooleanToEmptyObjectAdapter.class)
    private final Boolean isPresent = false;

    ...        
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM