2013-03-06 62 views
2

我有我的XML模式定義如下JAXB生成的XSD類總是有@XmlElement(必需=真)

<?xml version="1.0" encoding="UTF-8"?> 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns="http://poc/" 
elementFormDefault="qualified" 
targetNamespace="http://poc/" 
attributeFormDefault="unqualified" 
xmlns:tns="http://poc/"> 

<xs:simpleType name="custType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="Primary"/> 
     <xs:enumeration value="Coapplicant"/> 
    </xs:restriction> 
</xs:simpleType> 
<xs:complexType name="addressType"> 
    <xs:sequence> 
     <xs:element name="address" type="xs:string"/> 
     <xs:element name="city" type="xs:string"/> 
     <xs:element name="state" type="xs:string" minOccurs="0"/> 
     <xs:element name="zip" type="xs:string" minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:element name="request1"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="fname" type="xs:string" minOccurs="0"/> 
      <xs:element name="lname" type="xs:string" minOccurs="0"/> 
      <xs:element maxOccurs="1" name="categoryCode" minOccurs="0"> 
       <xs:simpleType> 
        <xs:restriction base="xs:integer"> 
        <xs:maxLength value="4"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:element> 
      <xs:element name="retiredInd" type="xs:boolean" minOccurs="0"/> 
      <xs:element name="custType" type="tns:custType" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="response1"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="addr" type="tns:addressType" minOccurs="0"/> 
      <xs:element name="nation" type="xs:token" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

我使用Maven的JAXB2-插件產生針對該XSD的Java類。

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.8.3</version> 
    <configuration> 
     <schemaDirectory>${basedir}/cfg</schemaDirectory> 
     <schemaIncludes> 
      <include>xsd/*.xsd</include> 
     </schemaIncludes> 
     <generateDirectory>${basedir}/src/main/java</generateDirectory> 
     <strict>false</strict> 
     <extension>true</extension> 
     <removeOldOutput>false</removeOldOutput> 
     <clearOutputDir>false</clearOutputDir> 
     <forceRegenerate>true</forceRegenerate><plugins> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics</artifactId> 
       <version>0.6.4</version> 
      </plugin> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics-annotate</artifactId> 
       <version>0.6.4</version> 
      </plugin> 
     </plugins> 
    </configuration> 
    <executions> 
     <execution> 
     <id>tsys-sources</id> 
     <goals> 
      <goal>generate</goal> 
     </goals> 
     </execution> 
    </executions> 
</plugin> 

生成代碼後,我發現所有的元素都有@XmlElement註解(required = true)。爲什麼?我有很多minOccurs =「0」元素。爲什麼required = true總是添加在元素上。

回答

2

我產生源從您例如,使用插件從你的例子
,我只對

AddressType#address 
AddressType#city 

領域有@XmlElement(required = true)

public class AddressType { 

    @XmlElement(required = true) 
    protected String address; 
    @XmlElement(required = true) 
    protected String city; 
    protected String state; 
    protected String zip; 
    // ... 
} 

因此,請將minOcurrs添加到此字段中。

0

我的本地配置問題在我的binding.xml中。我清除了一些無用的配置後修復了它。

相關問題