问题标签 [xmlcatalog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
33 浏览

xml - 使用 XSLT 转换 XML 时将目录文件设置为虚拟 dtd 是否有缺点

将目录文件设置为指向一个空文件以用作具有 DOCTYPE 声明的 XML 文件的 DTD 可以正常工作。但是撒克逊引擎有什么缺点吗?如果在本地提供正确的 DTD 副本,处理 XML 会更有效吗?还是这取决于手头的 XLST 的(复杂性/简单性)?(假设在后一种情况下 XML 对提供的 DTD 有效)

0 投票
1 回答
457 浏览

java - Java、xml、目录文件、XSD 模式验证和 NullPointerException(JAXP09020006:参数“systemId”不能为空。)

我正在尝试运行一个小示例,该示例旨在将目录文件与模式文件一起存储在 Java 包中。目的是获得一个不依赖任何外部文件的自包含包,最终这将被打包在一个 JAR 中,但现在它是文件系统中的普通文件。

但是我在 JAXP 类的深处得到了一个 NullPointerException 并且到目前为止我无法理解是什么触发了这个异常以及我应该做些什么来摆脱它。

Java源代码 (内容./foo/Foo.java

目录文件 (内容./foo/catalog.xml

XSD 架构文件 (的内容./foo/schemas/xyzzy.xsd

XML 文件 xyzzy.xml (的内容./xyzzy.xml

我应该怎么做才能摆脱这个异常?

更新

我想我已经能够弄清楚这里发生了什么,而且我的直觉告诉我,我设法触发了一个错误,java.xml/javax.xml.catalog.CatalogResolverImpl.resolveEntity其中只考虑 systemId是否与 publicIdnull 无关null的情况。当 systemId 为nullif publicId is not时,这是完全可以的null

我为解决这个问题所做的工作是创建一个实现CatalogResolver接口的包装类,并在只有 systemId 是null(通过简单地替换null"")以及 systemId 和 publicId 都是null(抛出一个提供更合理的理由和解释的例外情况)。您可以在下面找到我修改后的代码。

并且 XML 示例中有一个小错误(它与架构不匹配),匹配的 XML 文件是

Java 文件 Resolver.java (的内容./foo/Resolver.java

Java 文件 Foo.java 的修改部分 (在 if 子句中添加了几行代码以及一些上下文)

工作成果

0 投票
0 回答
19 浏览

c++ - 如何将 OASIS 目录与 libXML2 一起使用

我想使用 libXML2 来验证具有 XSD 架构的 XML 文件。我的 XML 文件和我的 XSD 模式之间的链接是通过在 OASIS 目录中定义的 URI 完成的。

在 libXML2文档中解释了可用于支持目录文件的功能。但是,我没有找到任何 C++ 或 C 示例来展示我们如何做到这一点。

你有任何可以帮助我的例子或参考资料吗?

谢谢

0 投票
0 回答
35 浏览

spring - 使用 javax.xml.catalog.files 时 Spring 无法启动

当我使用 -Djavax.xml.catalog.files=file://localhost/C:/path/to/Xml/catalog.xml 使用自定义 XML 目录时,我无法启动 Spring 5.3.10 应用程序。Spring 似乎没有为目录提供足够的信息来查找 URL。我可以使用在 Tomcat 中运行的 Spring 使用 WebMvc 并使用 Spring Boot 来重现这一点。

重现此问题的最简单方法是使用 STS 4 向导和以下非常简单的 Spring Boot 应用程序创建新的 Spring Boot 应用程序:

beans.xml 文件非常简单,它只是制作 id 为 "message" 的 bean 并在其中放入一个字符串:

应用程序在没有 XML 目录的情况下可以正常工作,但是只要我使用 -Djavax.xml.catalog.files=file://localhost/C:/path/to/Xml/catalog.xml 启动应用程序,那么 Spring 就可以了t 从以下错误开始(我也有 -Djaxp.debug=99):

使用调试器,我已经确定在解析 applicationContext.xml 文件时尝试解析“http://www.w3.org/XML/1998/namespace”时出现问题,因为在 java.xml.catalog.CatalogResolverImpl 中是 resolveEntity方法检查 systemId 是否为空。

有没有办法通过 Spring 使用 Java 11+ 的 Java 内置 XML 目录功能?