JAXB 将名称空间从其他类写入一个类

发布于 2025-01-01 01:03:38 字数 643 浏览 0 评论 0原文

当我使用所有类创建 jaxbcontext 时,jaxb 会使用其他类的命名空间为类构建 xml。 如果我只传递给 jaxbcontext 一类,它就可以正常工作。 我的类是由xjc生成的。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {

 })
@XmlRootElement(name = "eReq")
public class EReq {
...

当我仅将此类传递给 jaxbcontext 时,输出如下。

<eReq><status>UNBLOCKED</status></eReq>

但我将所有类放入 jaxb 上下文中,输出将如下所示:

<eReq xmlns:ns2="myns1" xmlns:ns3="myns2" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/"><status>UNBLOCKED</status></eReq>

这是我其他类的命名空间。为什么jaxb把它放到这个类中呢?

When i create a jaxbcontext with all my classes, jaxb build xml for a class with a namespace from other class.
If i pass to jaxbcontext only one class it work fine.
My classes are generated by xjc.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {

 })
@XmlRootElement(name = "eReq")
public class EReq {
...

And when i pass only this class to jaxbcontext the output is following.

<eReq><status>UNBLOCKED</status></eReq>

But i put all my classes into jaxb context output will be like this:

<eReq xmlns:ns2="myns1" xmlns:ns3="myns2" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/"><status>UNBLOCKED</status></eReq>

This is namespaces from my other classes. Why jaxb put it to this class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

动听の歌 2025-01-08 01:03:38

为什么jaxb把它放到这个类中?

因为 JAXB 上下文包含它创建时使用的所有名称空间的超集,并且它只是将它们全部放入它生成的每个文档中。

这样做是因为需要将命名空间添加到根元素(以避免在每个子元素上重新声明命名空间的巨大浪费),并且它事先不知道任何给定的绑定对象集需要哪些命名空间( JAXB 支持增量序列化)。

因此,JAXB 运行时可能可以避免这样做;但事实并非如此。

如果你不喜欢它,那么你需要构建多个上下文。

Why jaxb put it to this class?

Because the JAXB context contains the superset of all namespaces that it's created with, and it just puts them all in each document it generates.

It does this because the namespaces need to be added to the root element (to avoid hugely wasteful re-declaration of namespaces on each child element), and it doesn't know in advance which namespaces are required for any given set of bound objects (JAXB supports incremental serialization).

So the JAXB runtime probably could avoid doing that; but it doesn't.

If you don't like it, then you need to build multiple contexts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文