1

2 つの jar (main.jar と schema.jar) があり、main.jar 内のクラスの schema.jar からスキーマ ファイル (src/main/resources/sample.xsd にあります) を読み取る必要があります。main.jar のクラスパスには、maven 依存関係として schema.jar があります。this.getClass().getClassLoader().getResourceAsStream を使用すると、sample.xsd ファイルを見つけることができますが、java.io.File が必要です。java.io.File パラメータを提供する最もメモリ効率の良い方法は何ですか?

main.jar:

InputStream in = this.getClass().getClassLoader()
        .getResourceAsStream("/resources/sample.xsd");

Sample sample = new Sample();
//set sample data here
 Marshaller marshaller = JAXBContext.newInstance(Sample.getClass()).createMarshaller();
    final SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    final Schema s = schemaFactory.newSchema(new File("/resources/sample.xsd"));
marshaller.setSchema(s);
    marshaller.marshal(Sample, XML);
4

1 に答える 1

5

SchemaFactory#newSchema(URL)代わりにメソッドを使用してください。

URL url = getClass().getClassLoader().getResource("/resources/sample.xsd");
// ...
final Schema s = schemaFactory.newSchema(url);

InputStreamいずれにせようまくいきませFileん(一時ファイルを作成することはできますが、それは不器用です)。JAXB は内部でInputStream、提供された からURLを取得しURL#openStream()ます。

于 2013-09-25T19:02:36.060 に答える