簡體   English   中英

如何生成從XSD實現可序列化的Java文件

[英]How to generate java file which implements serializable from xsd

我必須生成一個也實現可序列化接口的類,以下是我正在使用的xsd文件以及maven jaxb2插件

這是我的.xsd文件

<?xml version="1.0" encoding="windows-1252" ?>

<xsd:complexType name="Status">
    <xsd:sequence>
        <xsd:element name="startTime" type="xsd:double" minOccurs="0" />
        <xsd:element name="endTime" type="xsd:double" minOccurs="0" />
    </xsd:sequence>
</xsd:complexType>

我的JAXB2 plugin

 <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.8.3</version>
            <executions>
                <execution>
                    <id>status</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <forceRegenerate>true</forceRegenerate>
                        <schemaDirectory>src/main/resources/xsd</schemaDirectory>
                        <schemaIncludes>
                            <include>Status.xsd</include>
                        </schemaIncludes>
                        <generatePackage>com.test.model</generatePackage>
                        <args>
                            <arg>-XtoString</arg>
                            <arg>-Xcopyable</arg>
                            <arg>-Xequals</arg>
                        </args>
                        <plugins>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics</artifactId>
                                <version>0.6.4</version>
                            </plugin>
                        </plugins>
                    </configuration>
                </execution>

            </executions>
            <dependencies>
                <dependency>
                    <groupId>com.datastax.cassandra</groupId>
                    <artifactId>cassandra-driver-core</artifactId>
                    <version>3.1.3</version>
                </dependency>
                <dependency>
                    <groupId>com.datastax.cassandra</groupId>
                    <artifactId>cassandra-driver-mapping</artifactId>
                    <version>3.1.3</version>
                </dependency>
            </dependencies>
        </plugin>

這里生成了實現Cloneable, CopyTo, Equals, ToString interfaces Java類Cloneable, CopyTo, Equals, ToString interfaces我嘗試使用<arg>-Xserializable</arg>但是它沒有用,我需要這個生成的類也應該實現Serializable interface

我像這樣使用jaxb2-maven-plugin:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>xjc</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <extension>true</extension>
                <arguments>-XtoString -Xcopyable</arguments>
                <outputDirectory>target/generated-sources/</outputDirectory>
                <schemaDirectory>src/main/resources</schemaDirectory>
                <bindingDirectory>src/main/resources</bindingDirectory>
                <bindingFiles>binding.xml</bindingFiles>
            </configuration>
        </plugin>

binding.xml:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc" jaxb:version="1.0">
<jaxb:globalBindings generateIsSetMethod="true">
    <xjc:serializable uid="12343" />
</jaxb:globalBindings>

具有這種依賴性:

<dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics</artifactId>
</dependency>

我將解決方案修改為xsd:schema declaration to

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
       xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
       jaxb:extensionBindingPrefixes="xjc"
       jaxb:version="1.0">
 <xsd:annotation>
   <xsd:appinfo>
    <jaxb:globalBindings generateIsSetMethod="true">
      <xjc:serializable uid="12343"/>
    </jaxb:globalBindings>
  </xsd:appinfo>
</xsd:annotation>

然后在path/to/jdk1.8.0/jre/lib下添加jaxp.properties (如果不存在),然后在其中寫入以下行:

javax.xml.accessExternalSchema = all

暫無
暫無

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

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