栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Jaxb:如何解组XS:任何XML字符串部分?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jaxb:如何解组XS:任何XML字符串部分?

@XmlAnyElement(lax = true)
用简单的英语意思是:

亲爱的JAXB!如果您有此元素的映射,请将其解组为Java对象。如果您不知道此元素,请将其保留为DOM元素。

这正是您的情况。因此,如果您想实际解组此松散内容的内容,请为JAXB上下文提供要解组的元素的映射。最简单的方法是用

@XmlRootElement

@XmlRootElement(name="foo", namespace="urn:bar")public class MyClass { ... }

现在,当您创建JAXB上下文时,添加

MyClass
到其中:

JAXBContext context = JAXBContext.newInstance(A.class, B.class, ..., MyClass.class);

在这种情况下,如果JAXB

{urn:bar}foo
在那个位置遇到元素
xs:any
,它将知道该元素已映射到该元素
MyClass
,并尝试解组MyClass。

如果要基于包名称创建JAXB上下文(您可能会这样做),则仍可以向其中添加类(例如

com.acme.foo.MyClass
)。最简单的方法是创建
com/acme/foo/jaxb.index
资源:

com.acme.foo.MyClass

并将您的包名称添加到上下文路径:

JAXBContext context = JAXBContext.newInstance("org.dar.gee.schema:com.acme.foo");

等还有其他方法

ObjectFactory
,但是窍门
jaxb.index
可能是最简单的方法。

另外,您也可以将

xs:any
as DOM
的内容保留为DOM,然后通过JAXB上下文(知道您的
MyClass
类)进行第二次解组,而不用一次将所有内容解组。就像是:

JAXBContext payloadContext = JAXBContext.newInstance(MyClass.class);payloadContext.createUnmarshaller().unmarshal((Node) myPayload.getAny());

这种方法有时会更好,特别是当您具有相对独立的容器/有效负载方案组合时。视情况而定。

上述所有内容也适用于编组。全部都是双向的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428025.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号