gpt4 book ai didi

java - JAXBContext 和 @XmlNsForm 注释

转载 作者:行者123 更新时间:2023-11-30 04:59:36 25 4
gpt4 key购买 nike

请阐明 JAXBContext 配置。鉴于:

  • 客户库 com.mycompany.user01234 包含多个JAXB 注解的类
  • 所有类都是位于同一个包中的简单 POJO
  • 类由 @XmlType 注释

客户通过 Web 服务端点将 com.mycompany.user01234.UserClass1.class 实例编码到服务器。在服务器端我执行以下操作:

JAXBContext jbc = JAXBContext.newInstance("com.mycompany.user01234")
Unmarshaller um = jbc.createUnmarshaller();
JAXBElement<Object> element = um.unmarshal(source, Object.class);
Object customerInput = element.getValue();

并且如果我使用以下package-info.java修补客户库,它就可以正常工作:

@XmlSchema(elementFormDefault = XmlNsForm.QUALIFIED)
package com.mycompany.user01234;

令我羞愧的是,我还没有找到任何关于这个 @XmlNsForm 注释是什么以及它如何影响解码过程的明确解释。这是第一个问题。

第二个问题是是否可以(在给定的布局中)将该 QUALIFIED 值放入 JAXBContext 的某些属性或默认值中,或者使用其他非声明性方式允许摆脱package-info.java

非常感谢!

最佳答案

它完全对应于 elementFormDefault <xs:schema> 的属性元素(即 XML 模式文档的顶级元素)。它的作用(使用该常量)是声明模式定义的命名空间中的元素应该使用限定符呈现(即,作为 <foo:bar> 而不是 <bar> );两种样式之间声明 namespace 的确切方式也会有所不同。就XML信息集而言,两种风格是完全等价的;如果在 XML 中正确声明了命名空间,JAXB 应该同样高兴(我相信它应该只在序列化时使用该值)。

您可能想尝试制作您的 JAXBContext通过传入您期望的类,这样您就可以减少对发现代码的依赖(假设它是真正生成的 FooBar 类):

JAXBContext jbc = JAXBContext.newInstance(FooBar.class);
FooBar customerInput = (FooBar) jbc.createUnmarshaller().unmarshal(source);

(上面的代码是从我在代码测试套件中所做的事情中抽象出来的,这些事情肯定已经可以工作了。)

关于java - JAXBContext 和 @XmlNsForm 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7317849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com