標籤:類對象 artifact direct main pack pom.xml schema als 說明文
#0. 準備要轉換的xml檔案,在Project視界中,右擊這個xml檔案,在彈出的菜單上選擇“Generate XSD schema from XML File...”, 按預設設定產生xsd檔案。
將xsd 檔案移至#1配置段的configuration/sources/source指定的路徑下.
#1. 開啟pom.xml, 加入下面的配置段.其中configuration節點中的內容依具體的項目不同而有不同的設定。一般而言,有3處設定:packageName,outputDirectory 和sources,
具體的官方說明文檔,請參見:http://www.mojohaus.org/jaxb2-maven-plugin/Documentation/v2.2/xjc-mojo.html
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <version>2.3.1</version> <executions> <execution> <id>xjc</id> <goals> <goal>xjc</goal> </goals> </execution> </executions> <configuration> <!-- The package of your generated sources, Jaxb會按這個Package的層次組建目錄,並把Java類產生到這個Package中 --> <packageName>JaxbHelper.Entity</packageName> <!-- The path of your generated sources class, 輸出Java類的根目錄地址 --> <outputDirectory>D:\Git\zfq308\JaxbHelper\src\main\java\</outputDirectory> <sources> <!-- 此處為 xsd的路徑, Sources節點下可以支援設定多個xsd檔案 --> <source>D:\Git\zfq308\JaxbHelper\src\main\resources\FeedTestCase1.xsd</source> </sources> </configuration> </plugin> </plugins> </build>
View Code
#2. 在POM檔案中加入#1所示的xml節點後,在Maven Projects視界視窗,找到你項目的節點,在Plugins節點下,
找到jaxb2節點,展開後,雙擊執行jaxb2:xjc 任務即可在指定的輸出檔案夾下產生相應的Entity.
#3. 將xml的資料通過jaxb載入成具體的類對象執行個體時,可採用下面的代碼:本例中,TestSuitesType是xml的根節點。
import JaxbHelper.Entity.TestSuitesType;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;import java.io.File;public class App { public static void main(String[] args) throws JAXBException { File file=new File("D:\\Git\\zfq308\\JaxbHelper\\src\\main\\resources\\FeedTestCase1.xml"); JAXBContext jaxbContext = JAXBContext.newInstance(TestSuitesType.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); TestSuitesType testSuites = (TestSuitesType) jaxbUnmarshaller.unmarshal(file); Integer i=0; // 此行用於斷點測試 }}
請注意:直接執行時,編譯器編譯通過,但運行時報:Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TestSuites"). Expected elements are (none)的錯誤。
究其原因是因為Jaxb並不知道你所產生的這些Java類,誰是主節點。為此,需要在對應xml根節點的類裡加入一個標註:@XmlRootElement(name="TestSuites")
加入前為:
@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "TestSuitesType", propOrder = {"testSuite"})public class TestSuitesType {}
加入後為:
@XmlRootElement(name="TestSuites")@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "TestSuitesType", propOrder = {"testSuite"})public class TestSuitesType {}
修改後即可正常使用。
#4. 如XML 有修改需要重建xsd、Java類等,可直接刪除相應的xsd、java類和META-INF檔案夾,必要時再刪除target 目錄,再重複#2-#3即可。
如何在IJ中使用Jaxb2通過xml定義產生對應的Java Entity類的檔案