Jaxb2Marshaller:使用0/1来生成xsd:boolean值和生成的java模型

时间:2018-02-08 21:39:46

标签: java xsd jaxb jaxb2 xjc

我正在使用Jaxb2Marshaller编组和解组肥皂请求和响应。

我的java模型类是基于使用xjc的wsdl生成的。

我有一个奇怪的要求,xsd:boolean类型的字段应该在结果xml中被封送为1或0(默认情况下为" true"或者" false"使用值)

我已经尝试按如下方式创建XmlAdapter:

public class JaxbBooleanAdapter extends XmlAdapter<Integer, Boolean> {

    @Override
    public Boolean unmarshal(final Integer v)
    {
        return v == null ? null : v == 1;
    }

    @Override
    public Integer marshal(final Boolean v)
    {
        return v == null ? null : v ? 1 : 0;
    }

}

并设置我的Jaxb2Marshaller来使用它:

marshaller.setAdapters( new JaxbBooleanAdapter() );

但它不起作用。

当我使用@XmlJavaTypeAdapter( JaxbBooleanAdapter.class )注释java模型类时,它工作得很完美,但我的java模型是由xjc生成的,我无法使用绑定生成注释,我尝试了以下绑定:

<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
    xmlns:xsd="http://w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">

    <globalBindings>
        <xjc:javaType xmlType="xsd:boolean" name="java.lang.Boolean"
            adapter="br.com.neolog.label.integration.configuration.JaxbBooleanAdapter" />
    </globalBindings>
</bindings>

我的问题是:有没有办法强制Jaxb2Marshaller为使用xjc生成的java模型类将布尔值编组为0/1?

0 个答案:

没有答案