簡體   English   中英

使用Maven xjc進行編譯時,JAXB不會為xsd電子郵件模式元素創建類

[英]JAXB is not creating class for xsd email pattern element when compile using maven xjc

我正在使用xsd,其中我是驗證電子郵件

<xsd:element name="Company" type="Company"/>  
<xsd:complexType name="Company">  
    <xsd:sequence>  
        <xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1" />
        <xsd:element name="Website" type="xsd:string" minOccurs="0" maxOccurs="1" />
        <xsd:element name="Email" type="EmailAddress" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
    <xsd:attribute name="AccountStatus" type="AccountStatus" use="optional" default="Active" />
</xsd:complexType>

<xsd:simpleType name="EmailAddress">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="[A-Za-z0-9_]+([-+.'][A-Za-z0-9_]+)*@[A-Za-z0-9_]+([-.][A-Za-z0-9_]+)*\.[A-Za-z0-9_]+([-.][A-Za-z0-9_]+)*"/>
    </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="AccountStatus">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Active"/>
        <xsd:enumeration value="Inactive"/>
    </xsd:restriction>
</xsd:simpleType>

這是我使用xjc片段的pom.xml文件

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <goals>
                <goal>xjc</goal>
            </goals>
            <phase>generate-sources</phase>
        </execution>
    </executions>
    <configuration>
        <clearOutputDir>false</clearOutputDir>
        <outputDirectory>src/main/java</outputDirectory>
        <schemaDirectory>src/main/webapp/schemas</schemaDirectory>
        <includeSchema>**/*.xsd</includeSchema>
        <bindingDirectory>src/main/resources/bindings</bindingDirectory>
        <bindingFiles>binding.xml</bindingFiles>
        <enableIntrospection>false</enableIntrospection>
    </configuration>
</plugin>

這是我的binding.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
<jaxb:bindings>
    <jaxb:globalBindings generateElementProperty="false" />
</jaxb:bindings>

這是生成的Company.java類

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Company", propOrder = {
    "name",
    "website",
    "email"
})
public class Company {

    @XmlElement(name = "Name", required = true)
    protected String name;
    @XmlElement(name = "Website")
    protected String website;
    @XmlElement(name = "Email")
    protected String email;
    @XmlAttribute(name = "AccountStatus")
    protected AccountStatus accountStatus;

    //setter and getters

}

看到沒有適用於我的電子郵件屬性的電子郵件模式。 為什么呢

當我使用Maven編譯我的代碼時,沒有EmailAddress.java類將模式應用於Company.java中的我的電子郵件屬性。 AccountStatus也是一個簡單的類型,但是maven創建了AccountStatus.java類。 當我使用Maven進行編譯時,為什么Maven沒有創建EmailAddress.java類? 我的圖案有問題嗎?

謝謝

因為對應的架構類型是枚舉,所以生成了AccountStatus 對於其他簡單類型(即帶有模式的類型),將不會生成類。 不為EmailAddress類型生成類的原因有兩個:

  1. 這會使類模型不必要地變大。
  2. JAXB不會驗證該級別的內容,因此擁有額外的生成類不會提供任何價值。
  3. 可以通過在Marshaller / Unmarshaller上設置Schema實例來驗證該值(請參閱: http : //blog.bdoughan.com/2010/12/jaxb-and-marshalunmarshal-schema.html )。

而是,該屬性將基於基本架構類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM