演示 JAXB 解组不会加载 XSD 模式

问题描述 投票:0回答:1
java security xsd jaxb unmarshalling
1个回答
1
投票

我并不真正理解检查这一点的必要性,但这里有一个简单的用例,应该证明在解组 XML 时 XSD 文件不会被 JVM 加载:

  • 通过任何您想要的插件从 XSD 创建 Java 类,或者像这里一样,手动创建它。将其打包在 jar 文件中,其中不含 XSD(仅限 Java 类)
  • 在另一个 Java 程序中从 XML 编写解组代码,该代码依赖于第一个 JAR,并在类路径中没有任何 XSD 的情况下运行它 ==> 即使不知道 XSD 架构,您的代码仍然可以工作

您还可以查看 Java 代码本身:

    实现
  • com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl
     接口的 
    Unmarshaller
    的默认
    schema
    属性为
    null
    (因此将其设置为
    null
    在上面的代码中是无操作的)
  • 您的代码不引用您创建 Java XML-annotated-POJO 的 XSD 本身:JVM 无法猜测您是根据外部模式编写的代码。
  • 您还可以在调试模式下运行程序,并看到 XSD 不会被加载(同样,您的 Java 代码中没有引用:您甚至可以删除它,这不会产生任何影响)。

不过,我希望我已经回答了你的问题。

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