请详细说明JAXBContext配置。 给出:
com.mycompany.user01234
有几个
JAXB注释类@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
的某些属性或默认值中,或者使用其他非声明性方法来释放{ {1}}。
非常感谢提前!
答案 0 :(得分:2)
它完全对应于elementFormDefault
元素的<xs:schema>
属性(即XML Schema文档的顶级元素)。它的作用(使用该常量)是指由模式定义的命名空间中的元素应该使用限定符(即<foo:bar>
而不是<bar>
)来呈现;声明命名空间的确切方式也会因两种样式而异。就XML信息集而言,这两种风格完全相同;如果在XML中正确声明了名称空间,JAXB应该同样高兴(我相信它应该只在序列化时使用该值)。
您可能希望通过传入您期望的类来尝试创建JAXBContext
,这样您就不再依赖于发现代码(假设它是一个真正生成的FooBar
类) :
JAXBContext jbc = JAXBContext.newInstance(FooBar.class);
FooBar customerInput = (FooBar) jbc.createUnmarshaller().unmarshal(source);
(上面的代码是从我在代码的测试套件中执行的操作中抽象出来的,肯定已经正常工作。)