java XJC ignore nillable=true
为了避免值被包装在JAXBElement
中,我使用以下绑定文件从XSD生成类:
<?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:
<!-- ... -->
<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将生成一个包含字段的类:
@XmlElement(required = true, nillable = true)
protected String fieldOne;
@XmlElement(nillable = true)
protected String fieldTwo;
当fieldTwo
为null
时,请求将包含一个字段,其中nil设置为true:
<fieldOne>1001714</fieldOne>
<fieldTwo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
这对于我集成的Web服务来说是一个问题,因为尽管它是一个有效的XML,但它在这样的请求下会阻塞。我已经说过,当一个字段是null
时,它就不应该出现在请求中。我意识到为了满足这个要求,生成的类不能将@XmlElement
注释的nillable
属性设置为true
在使用XJC生成类时,有没有办法忽略XSD文件中的nillable=true
# 1 楼答案
将XJC与jaxb2 basics annotate结合使用对我们来说很有效
pom。xml
绑定。xjb