我在我的Java項目中創建了一個XSD文件,該文件定義了一個用戶可編輯的輸入文件(例如,假設XSD被稱爲userinput。 xsd和用戶可編輯的文件是userinput.xml)。當程序運行時,它使用JAXB來驗證用戶在XML文件中沒有犯任何錯誤,因爲它將文件解組到DOM中。我應該在哪裏放置一個用於JAXB代碼gen和XML驗證的XSD文件
我已經使用Maven Standard Directory Layout構建了我的項目,並使用xjc生成了JAXB對象工廠和其他類,並將它們放置在名爲/ src/main/java/my/name/space/generated/userinput的目錄中XSD的名稱)。
我已將XSD文件放在/ src/main/resources中。
當我打包我的jar文件,該文件是在罐子裏的根,我可以引用它在Java代碼如下(特別是在第4行中提到的資源注):
JAXBContext jaxbContext = JAXBContext.newInstance("my.name.space.generated.userinput");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(getClass().getResource("/userinput.xsd"));
unmarshaller.setSchema(schema);
JAXBElement<?> userinputType = (JAXBElement<?>) unmarshaller.unmarshal(new FileInputStream("userinput.xml"));
這可行,但它看起來不正確,因爲它意味着如果我想擴展到多個輸入文件,我最終可能會在源代碼管理的資源目錄和jar文件的根目錄中產生很多.xsd文件。
此外,當我從我的IDE,而不是從包裝罐子運行程序,我必須將第四條語句更改爲:
Schema schema = schemaFactory.newSchema(getClass().getResource("src/main/resources/userinput.xsd"));
我應該在哪裏放置XSD文件(一)在我的源代碼控制(即,Maven結構)和(b)在我的jar文件中? [注意:通過我的IDE運行xjc會將其放入.../generated/userinput目錄,但Maven會在打包時忽略它。]
我正在查找指示存在某種常用方法的答案,所以如果可能的話,想參考。如果這對於開發人員來說目前是一個不確定的選擇,那麼請說出來(最好是引用),因爲我明白,stackoverflow不是收集意見的地方。
XML模式文件與許多其他文件一樣是一種資源。它可能是網絡上的資源。除此之外,它可能是一個定義應用程序之間接口的資源:那麼它應該放在所有人都可以使用的地方。如果它與Java庫捆綁在一起,那麼一個jar可能是正確的地方。 – laune
我意識到我的問題不明確。我詢問源代碼中的哪個特定目錄,以及將XSD文件放在哪個(可能不同)目錄內,以便與其他人期望的一致。它是一個免費的決定,還是像Maven標準目錄佈局那樣可以用作指南? – johnsgp
在Eclipse中,項目通常包含子目錄src,bin,resources。在一個jar文件中,一個.xsd將被你自己的SW所訪問,所以沒有「別人期望」,我想。我在META-INF或某些軟件包中看到了xsd文件,還有.class或以下的./src文件。 – laune