- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到过很多 JAXB 序列化错误,这些错误是由代码在不同位置创建无效的限定名称这一事实引起的。我正在研究我正在使用的 API 和其他 Java XML 选项,一件奇怪的事情是实现限定名称的类似乎根本不进行任何输入检查。
这确实是有问题的,因为复杂的代码会生成各种 JAXB 对象,直到编码时您才发现出现了可怕的错误。异常堆栈通常不会告诉您哪个元素/属性有问题,只会告诉您出了什么问题。
对于这些库来说,让创建不可序列化的内容变得更加困难不是更有意义吗?
这是一个代码片段:为什么它有效?它不应该抛出一个 IllegalArgumentException
吗?在其他定义 QName 的 API 中,行为是相同的。此类的 javadoc 指定如果命名空间为 null,您将得到一个 IllegalArgumentException
,否则不会。
QName q = new QName("Namespace URI is supposed to be an anyURI, but clearly !!THIS ISN'T!!",
"Local part is supposed to be an NCName, but clearly !!THIS ISN'T!!",
"<><><><>&&& Laughably Invalid Namespace Prefix");
System.out.println(q);
引用文献:Relevant javadoc for QName , spec constraints stating name is an anyURI, and localpart is an NCName .换句话说,根据规范,无论序列化如何,上面的代码都是明显无效的。
最佳答案
这里假设。
QName 构造函数的主要用户很可能不是通用 Java 代码本身,而是 XML 解析器。
XML 解析对性能敏感。如果解析器正在调用构造函数,理论上解析器已经验证了语法,因此再次验证它是浪费时间。
这是 95% 的问题。为什么要为 5% 的用户付出代价。
如果您想要一个验证 QName 构造函数,您可以扩展 QName 并添加您自己的代码。
例如:
public class VerifiedQName extends QName {
public VerifiedQName(String namespaceURI, String localPart) {
super(namespaceURI, localPart);
verfiyNamespaceURI(namespaceURI); // throws IllegalArgumentException
verifyLocalPart(localPart); // throws IllegalArgumentException
}
...
}
至少该类被记录为未验证。
关于java - 为什么在 Java 序列化框架中允许创建语法上非法的 QName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342229/
这是我的 XML: 正如许多帖子所建议的解决方案,检查了结束标签..也许我仍然错过了一些东西。请帮忙。 这也是 SOAP 请求 XML,我将其作为创建上述 xml 的源: 我为什么要这么做?我需要使用
升级到雅加达给我带来了一些问题。。我正在使用以下maven插件:。并且我使用episodal编译(有库)。突然间,我面临着以下问题:。更仔细的检查发现,XJC突然生成了以下字段:。这是它以前没有产生的
我正在尝试将 WSDL 定义转换为另一种格式以进行进一步处理,但遇到了问题。我似乎无法从函数返回 QName 值,而不会将它们转换为字符串。 我将文件缩减为以下内容,同时保留错误行为。原始函数应该使用
我的问题很简单。我正在向需要具有命名空间前缀的 SOAP 请求添加 header 。因此我正在使用 QName(String namespaceURI, String loc
尝试使用 XSL 样式表转换简单的 XML 文档。我现在正在使用 XMLspy,但最终目标是浏览器。 XML: Me BY-NC 2011-05-23 Collect
我对 QName 背后的概念非常困惑。 让我们举个例子(我从 http://www.mkyong.com/ 中获取了这些例子): ServerInfoService sis = new
我需要转换 xml 输出中的数据表,如下所示。C1 列 1 c2 列 2 等 desc prname prnum cdat
当我对以下 XML 代码进行语法检查时,出现错误: 第 2 行第 14 列错误:无法解析 QName“xmlns:” 谁能告诉我我做错了什么?谢谢! 最佳答案 事实上你自己也可以尝试一下 XML
我有一个使用 XML 编辑器“扁平化”的架构。在我展平它之后,我得到了一个验证错误。我该怎么做才能修复它? 错误信息: F [Xerces] Element or attribute do not m
无论我如何尝试,Eclipse 都会提示找不到 QName...它确实位于类路径上。它不会导致任何其他问题,我可以编译并运行,它只是总是显示找不到它。 Eclipse Java EE IDE for
无论我如何尝试,Eclipse 都会提示找不到 QName...它确实位于类路径上。它不会导致任何其他问题,我可以编译并运行,它只是总是显示找不到它。 Eclipse Java EE IDE for
我的 XML 解析器遇到了一些问题,实际上我有一个像这样的 XML 结构: 135 &我需要根据c r="K6"s="35"是否落在特定范围内来提取值v XXX/v。使用 reg ex 等这很
我遇到过很多 JAXB 序列化错误,这些错误是由代码在不同位置创建无效的限定名称这一事实引起的。我正在研究我正在使用的 API 和其他 Java XML 选项,一件奇怪的事情是实现限定名称的类似乎根本
我使用Apache XmlSchema 2.2.1解析 XSD 架构。我有以下架构: 以下代码产生异常
在 Python 的 lxml.etree 中,如何将命名空间添加到节点的属性中,如下所示: namespace 是: XS_NS = 'http://www.w3.org/2001/XMLSchem
任何人都可以通过简单易懂的示例来解释 QName、Operation 和 Stub 类在 J2ME 中的用途吗? 最佳答案 我以前没用过。请参阅以下 java 文档。也许它会对你有所帮助。 QName
我们正在尝试追踪错误。我们在日志中收到上述错误。 谁能解释一下这个消息是什么意思?收到此消息有任何典型原因吗? 堆栈跟踪是: org.apache.axiom.om.OMException: java
我想知道 xml qname 是什么,它们是预定义的名称,是否有它们的列表,或者我可以自己命名吗? 最佳答案 简短的回答是您可以自己起名字。在 Java 中创建 QName 和实例化服务的典型方法是:
Java中使用SAX解析XML文件时,startElement(String uri等SAX方法中参数localname和qname有什么区别, String localName,String qNa
我正在尝试使用父 maven 模块 ism-maven 制作一个 maven 模块 web_service_client。 该模块包含生成的 WS 类。我没有改变任何东西。我正在使用 IntelliJ
我是一名优秀的程序员,十分优秀!