Java 系统找不到XSL引用的DTD
我有一个使用XSLT转换(Java6)的Web应用程序。XSL文件(basic.XSL)引用DOCTYPE DTD,如下所示: Basic.xslJava 系统找不到XSL引用的DTD,java,xslt,filepath,Java,Xslt,Filepath,我有一个使用XSLT转换(Java6)的Web应用程序。XSL文件(basic.XSL)引用DOCTYPE DTD,如下所示: Basic.xsl 当我使用集成测试点击使用此逻辑的控制器端点时,它运行良好。但当Fiddler击中同一端点时,我得到一个错误: 错误:“C:\tools\eclipse\src\com\abc\xslt\MyXslt.dtd(系统找不到指定的路径)” 致命错误:“无法编译样式表” MyXslt.dtd位于工作区目录中。这是完整的路径- C:\Workspace\sr
当我使用集成测试点击使用此逻辑的控制器端点时,它运行良好。但当Fiddler击中同一端点时,我得到一个错误:
错误:“C:\tools\eclipse\src\com\abc\xslt\MyXslt.dtd(系统找不到指定的路径)”
致命错误:“无法编译样式表”
MyXslt.dtd位于工作区目录中。这是完整的路径-
C:\Workspace\src\com\abc\xslt\MyXslt.dtd
路径的其余部分得到了很好的解决,但基本路径是从eclipse所在的位置开始的,而不是从工作区开始的
我必须做些什么才能找到DTD
编辑:
一些海报建议给出绝对路径。这是行不通的,因为应用程序将部署在虚拟服务器上(不是我的本地机器)。我不能也不应该给出不同服务器中的绝对路径
必须有一种方法,可能是java自定义URI解析器中的某些设置,强制所引用的DTD相对于当前位置而不是相对于eclipse根进行解析。有什么想法吗?
意味着MyXslt.dtd
被指定为相对于XSLT文件的相对路径。由于XSLT位于C:\tools\eclipse\src\com\abc\XSLT\
目录中,因此也将在该目录中搜索DTD
您可以将其更改为绝对路径,像
或更改DTD文件的位置,以便XSLT中的相对路径有意义。听起来最重要的事情是向正在使用的工具的开发人员报告错误:XSLT样式表中的相对URI应该相对于样式表的位置进行解析,而不是应用程序的位置
同时,可能的解决方法包括使用绝对引用和注释掉文档类型声明。为什么要对样式表应用自定义DTD?我不确定这是否有意义。自定义DTD包含一些XSL中使用的实体定义。这两个都是我继承的遗留代码。您在多个具有不同目录结构的服务器上运行相同的应用程序吗?那样的话,你比我更勇敢。您说DTD“在工作区目录中”。这是否意味着它与样式表位于同一目录中?@OceanBlue您解决过这个问题吗?我在尝试从可执行文件中引用本地DTD时仍然存在此问题。绝对引用不起作用。请参阅编辑中的解释。然后将其保留在xslt所在的相同包结构中