2015-04-01 33 views
0

我使用relaxNG和Jing(在Java中使用relaxNG验证器)来验证一些XML文件,并且我需要合并语法(在两个语法中重用元素定义)。
为了实现合并我包括与元素的语法和我给href属性包含的语法文件的价值:RelaxNG:在罐子里合并文法

<include href="embededGrammar.xml"/> 

所有语法文件都位于相同的路径在我的Java项目的资源。
在IDE中测试应用程序时,将查找包含的语法和XML数据文件。
但是,当我将应用程序打包到JAR文件中时,找不到嵌入式语法,并且错误消息报告说它试图在与jar文件相同的位置找到它(不是在与嵌入位于相同位置的jar文件中语法,因为它应该)。

我已经实施了一种解决方法,但我想实施一个干净的解决方案,因此如果有人解决了这样的问题,请让我知道如何。
谢谢。

编辑:它工作正常,如果我硬编码href值指向jar文件(jar:file:./ jarfile.jar/path/to/file/ebeddedGrammar.xml)内的文件但jar文件名称可能会改变(版本号被附加),此外不能在IDE中进行测试。

回答

0

我发现了一个解决方案,它包含注册一个URLStreamHandler,它允许使用类路径协议来引用资源URL,就像我们可以使用Spring框架一样。 其结果是,可以参考我的嵌入式语法文件是这样的:

<include href="classpath:path/to/resource/embeddedGrammar.xml"/> 

如何注册和使用URLStreamHandler的一个明确的解释可以在这里找到:URL to load resources from the classpath in Java