首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XJC -忽略nillable=true

XJC -忽略nillable=true
EN

Stack Overflow用户
提问于 2016-11-17 14:42:17
回答 1查看 1.8K关注 0票数 7

为了避免将值包装在JAXBElement中,我使用以下绑定文件从XSD生成类:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
        version="2.1">

    <jaxb:globalBindings generateElementProperty="false">
        <xjc:simple />
    </jaxb:globalBindings>

</jaxb:bindings>

但是,nillable字段存在问题。对于以下XSD:

代码语言:javascript
复制
<!-- ... -->
<xsd:complexType name="getShortCustomerIn">
  <xsd:sequence>
    <xsd:element name="fieldOne" nillable="true" type="xsd:string"/>
    <xsd:element name="fieldTwo" type="xsd:string" minOccurs="0"/>
  </xsd:sequence>
</xsd:complexType>
<!-- ... -->

XJC将生成一个包含字段的类:

代码语言:javascript
复制
@XmlElement(required = true, nillable = true)
protected String fieldOne;
@XmlElement(nillable = true)
protected String fieldTwo;

fieldTwonull时,请求将包含一个字段,该字段的0设置为true:

代码语言:javascript
复制
<fieldOne>1001714</fieldOne>
<fieldTwo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>

这对于我集成的WebService来说是一个问题,因为尽管它是一个有效的XML,但是它会阻塞这样的请求。我曾经说过,当一个字段是null时,它就不应该出现在请求中。我意识到,为了满足这一需求,生成的类不能将@XmlElement注释的nillable属性设置为true

在用XJC生成类时,有没有一种方法可以忽略XSD文件中的nillable=true

EN

回答 1

Stack Overflow用户

发布于 2020-08-27 14:27:15

使用XJC与jaxb2 2-基础-注释为我们工作

pom.xml

代码语言:javascript
复制
<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <executions>
        <execution>
            <id>jaxb-generate</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <schemaDirectory>src/main/schema</schemaDirectory>
                <bindingDirectory>src/main/schema/bindings</bindingDirectory>

                ...

                <args>
                    <arg>-Xannotate</arg>
                    <arg>-XremoveAnnotation</arg>
                </args>

                ...

                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-annotate</artifactId>
                        <version>1.1.0</version>
                    </plugin>
                </plugins>
            </configuration>
        </execution>
    </executions>
</plugin>

bindings.xjb

代码语言:javascript
复制
<bindings schemaLocation="sample.xsd">
    <bindings multiple="true" node="//xsd:element[@nillable='true']">
        <annox:annotate target="field">@javax.xml.bind.annotation.XmlElement(nillable = false)</annox:annotate>          
    </bindings>
</bindings>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40657783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档