从java资源目录文件访问的文件的相对路径

问题描述 投票:0回答:1

我在 Java 资源目录中有一个 example.xsl 文件,可以通过以下方式在 Java 中访问该文件:

class.getClassLoader().getResourceAsStream("example.xsl")
但是example.xsl文件本身有一个引用

<xsl:include href="dir/i18n.inc.xslt"/>
我想将 dir 目录与 i18n.inc.xslt 放在资源目录中,但似乎当我部署代码时,程序正在寻找 

dir/i18n.inc.xslt

 里面 
glassfish/domains/domain1/config

我应该如何在 href 中引用 dir/i18n.inc.xslt 以便它可以查看资源内部?

编辑: 我使用java17和payara6。 xslt用于将xml转换为pdf。我正在使用 Apache FOP 来实现此目的。

InputStream styleSheetInput = MyClass.class.getClassLoader().getResourceAsStream("example.xsl"); final FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI()); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); try { Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, outputStream); // Setup XSLT TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource(styleSheetInput)); // Set the value of a <param> in the stylesheet transformer.setParameter("versionParam", "2.0"); // Setup input for XSLT transformation Source src = new StreamSource(datafile); // Resulting SAX events (the generated FO) must be piped through to FOP Result res = new SAXResult(fop.getDefaultHandler()); // Start XSLT transformation and FOP processing transformer.transform(src, res); }
我得到的错误:

[tid: _ThreadID=279 _ThreadName=__ejb-thread-pool11] [timeMillis: 1693598088423] [levelVal /usr/local/payara6/glassfish/domains/domain1/config/dir/i18n.inc.xslt (No such file or directory)]]
所以它似乎正在将 config 目录作为基本目录进行查找。但我不会将 xslt 文件放在那里,而是将其放在与资源中的 example.xsl 相同的位置。

java xslt glassfish
1个回答
0
投票
加载

XSLT file

 的上下文有时可能难以理解,因此了解如何根据文件上下文解析这些路径非常重要。

XSLT file

位于资源目录中,因此使用相对路径来引用位于
i18n.inc.xslt
内的
dir subdirectory
文件。所以解决方案是提供一条相对于 
XSLT file
 位置的路径。
假设您的目录结构如下所示:

src └── main └── resources ├── example.xsl └── dir └── i18n.inc.xslt
使用相对路径参考

it8n.inc.xslt

文件中的
example.xsl
。
这样做:

<xsl:include href="dir/i18n.inc.xslt"/>
当然

Deployment Configuration

也可能会被搞乱。如果配置或类路径存在问题,请确保应用程序类路径和资源加载配置设置正确。

请注意,在引用

XSLT

 文件中的资源或从类路径加载的其他资源时,在资源位置的上下文中使用正确的相对路径至关重要。否则将无法正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.