@Order注解对XML序列化顺序没有影响

2024-01-12

我正在使用 Retrofit 2SimpleXmlConverter我在创建 Soap 请求对象时遇到一个问题,该对象基本上是一个具有 4 个元素子元素的元素,每个子元素都是不同的数据类型。

这里是XML我想要产生的输出。必须遵守元素顺序:

 <prf:container>
    <prf:aaa>111111111</prf:aaa>
    <prf:bbb>true</prf:bbb>
    <prf:element>
        <prf:ddd>50</prf:ddd>
        <prf:eee>false</prf:eee>
    </prf:element>
    <prf:ccc>textcontent</prf:ccc>
</prf:container>

现在,这是我的 Android 类,Container.java,表示将被序列化的 Soap 请求对象:

@Root (name = "prf:container")
@Order(elements={"prf:aaa", "prf:bbb", "prf:element", "prf:ccc"})
public class Container {

    @Element (name = "prf:aaa")
    private int aaa;

    @Element(name = "prf:bbb")
    private boolean bbb;

    @Element (name = "prf:element", required = false)
    private MyElement myElement;

    @Element (name = "prf:ccc", required = false)
    private String ccc;

}

根据简单 XML 框架文档:

默认情况下,字段的序列化是按声明顺序完成的。

然而,在 Android 中,情况并非如此,至少在某些情况下是这样。无论我如何设置字段声明顺序Container类,输出始终具有相同的元素顺序。这是一个已知的错误,正如其他 SO 帖子中所报告的那样。

尽管如此,这个问题还是有解决办法的。这Order注解。 阅读更多在 Javadoc 中 http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/Order.html.

我的问题是使用Order就我而言,注释没有帮助。请注意,我的所有元素的名称都有前缀 -prf:.

如果我删除prf我所有元素名称的前缀,Order注释将正常工作,并强制 XML 序列化具有定义的顺序。但输出元素的名称上不会有前缀。

但我确实需要我的元素在其名称上有前缀,否则我的请求将得到 500 响应。我还必须在 XML 输出中具有所需的元素顺序。

有什么办法解决这个问题吗?

谢谢


我知道自从您发布此问题以来,这已经是一个很长的问题了,但是,我想回答您的问题,以防有人遇到同样的问题。我通过执行以下操作解决了同样的问题:

对于要按照所需顺序准备元素的 XML 文档,并且如果元素具有前缀,@Order 注释在某些情况下可能不起作用。在您的情况下,每个元素的 @Order 注释中提到的前缀“prf”将无法按照您的意愿对它们进行排序。

“默认情况下,字段的序列化是按照声明顺序完成的。”

我也不相信这一点,尤其是当元素有前缀时。因此,我尝试更改 Java 变量名称。我尝试按字母顺序命名它们,就像我在生成的 xml 中需要它们一样。因此,根据您的情况,您可以更改变量名称,如下所示:

@Root (name = "prf:container")
public class Container {

    @Element (name = "prf:aaa")
    private int element1;

    @Element(name = "prf:bbb")
    private boolean element2;

    @Element (name = "prf:element", required = false)
    private MyElement element3;

    @Element (name = "prf:ccc", required = false)
    private String element4;

}

这将完全按照您的需要形成 xml 文档。您可能想知道,如果我们将变量名称更改得过于通用,它们并不代表它们的实际含义,但是您始终可以拥有 getter 和 setter。例如,在您的情况下,您可以:

public void setAaa(String aaa){
    this.element1 = aaa;
}

public String getAaa(){
    return element1;
}

以同样的方式,您始终可以生成具有按字母顺序排列的变量的类,以确保生成的 xml 具有所需格式的元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Order注解对XML序列化顺序没有影响 的相关文章

  • OPENGL ES 不工作:无当前上下文

    我尝试了 OpenGL ES2 for Android 一书中所示的程序 但它不起作用 我已经在Odroid E 三星s3 三星y 三星star上进行了测试 the gl version suported returns 2 but i g
  • 在代码中旋转按钮(或其中的文本)

    我必须通过编码随机旋转按钮 或里面的文本 它是相同的 API级别低于11是否有button setRotate x 好吧 看了一下 答案是 很复杂 您可以使用旧的动画框架旋转按钮 例如像这样 Button button Button fin
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • 毕加索磁盘缓存

    我正在使用 Picasso 从 URL 加载图像 Picasso with getApplicationContext load product getImageUrl into imageView 据我所知 每次都会访问该网址 而不是缓存
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • 如何在 Android 应用程序中单击按钮时打开 Gmail Compose?

    当我的 Android 应用程序中单击按钮时 我尝试打开 Gmail 撰写屏幕 我需要 Google 提供的 API 密钥吗 或者我需要在按钮 onClickListener 中做什么 任何形式的见解都非常值得赞赏 正如 JeffC 指出的
  • Android CursorAdapter、ListView 和后台线程

    我一直在开发的这个应用程序有包含数兆字节数据的数据库可供筛选 许多活动只是列表视图 通过数据库中的各个级别的数据下降 直到到达 文档 即从数据库中提取并显示在手机上的 HTML 我遇到的问题是 其中一些活动需要能够通过捕获击键并重新运行带有
  • android:进程和进程名称

    我试图理解android process属性 Ref says http developer android com guide topics manifest application element html proc 如果分配给该属性的
  • 使用 saxon xquery 从 xml 中删除元素

    嗨 我有一个像这样的 xml
  • 更改 Android 中的媒体音量?

    我可以更改媒体音量吗 如何 到目前为止我用过这个 setVolumeControlStream AudioManager STREAM MUSIC 但有一个搜索栏并且想要更改媒体音量 而不是铃声音量 那么有人可以告诉我如何更改媒体音量onC
  • 使用 mupdf android 库导航到特定页面

    我如何使用 muPDF 库导航到特定页面 或者有没有办法让图书馆不记得我最后在那个pdf文件中浏览的是哪一页 Uri uri Uri parse path Intent intent new Intent MainActivity getC
  • 将图像保存到内部存储器并将出现在图库中

    我搜索了很多与我的问题相关的问题 是否有办法将图像存储在内存中并且它也应该出现在图库中 这是完全有可能的 我以前也这么做过 在将图像保存到内存 或称为应用程序文件夹等 之前 您最好设置Context MODE WORLDREADABLE 虽
  • 如何更改对话框片段内的片段

    我想做一个空的DialogFragment with a LinearLayout然后更改里面的片段LinearLayout 例如 第一个片段是 3 个按钮 facebook google 电子邮件登录 的登录 当有人按下电子邮件时 第 2
  • android 多关键词搜索

    我的应用程序包含搜索功能 它将搜索数据库内的内容 我的搜索的弱点是 我只能使用一个标签进行搜索 例如我只能搜索 猫 它会返回我的数据库中包含 猫 一词的内容 因为我正在使用LIKE在 select 语句期间进行查询 如何使用多个标签进行搜索
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 如何更改 Android 12 启动屏幕中的图标形状?

    我想要矩形形状的启动屏幕图标 而不是 android 12 中的圆形形状 我不相信你可以 如果你看这里的第 3 点 https developer android com about versions 12 features splash
  • 无法登录 Google Play 游戏服务

    我在开发者控制台上使用包名称和正确的签名证书设置了我的游戏 并为其创建了排行榜 但没有创建任何成就 然后 我从以下位置下载了示例 Type A Number Challenge 和 BaseGameUtils https developer
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new

随机推荐

  • 如何在 Kendo 网格中自动启用或禁用滚动条?

    这是我创建网格的代码 if Model GenericEntityList Count gt 0 Html Kendo Grid Model GenericEntityList Name screenNames ToString Colum
  • python 中 select 的 CPU 使用率达到 100%

    我在 python 中的 select 有问题 我有一段代码允许客户端从服务器接收数据 并通过在 stdin 上读取并在服务器套接字上写入来发送数据 readfds s sys stdin writefds s sys stdout my
  • 了解 JMH 输出

    因此 我对几种方法运行了 JMH 基准测试 并得到了如下响应 我无法理解到底是什么Score and Error值表示 有相同的参考文档吗 举个例子 ss stream带参数n 100000花了约 平均运行 30 次迭代需要 1 363 微
  • 如果将 UIView 添加为子视图,则 UIButton 目标不起作用

    我有一个UIButton 它有两个子视图 然后我打电话 createButton addTarget self action selector openComposer forControlEvents UIControlEventTouc
  • Java 重新排序会影响 System.currentTimeMillis() 吗?

    根据Java内存模型 指令可以重新排序 只要执行格式良好的 http docs oracle com javase specs jls se7 html jls 17 html jls 17 4 7 所以我想知道 以下代码是否可能产生以下输
  • Spark聚合函数——aggregateByKey是如何工作的?

    假设我有一个分布在 3 个节点上的系统 并且我的数据分布在这些节点之间 例如 我有一个 test csv 文件 该文件存在于所有 3 个节点上 并且包含 2 列 row id c row1 k1 c1 row2 k1 c2 row3 k1
  • 具有 DataBinding 的 RecyclerView 通用适配器

    我使用 DataBinding 为 RecyclerView 创建了通用适配器 这是小代码片段 public class RecyclerAdapter
  • 如何禁用 Jupyter Notebook(Tab) 中的自动完成功能

    I typed Summary outside the cell and change the config of Jupyter notebook When I press Tab the autocomplete menu pop ou
  • 如何根据点计算角度?

    我想要一个简单的解决方案来计算一条线的角度 就像时钟的指针 我有2点 cX cY the center of the line eX eY the end of the line The result is angle 0 lt a lt
  • 字典作为线程安全变量

    我有一个类 单例 它包含一个静态字典 private static Dictionary
  • 使用 Web 套接字在浏览器中创建图形

    我正在尝试寻找可以在网络浏览器中创建条形图的示例或工具 我将通过网络套接字从服务器发送数据 当接收到数据时 我希望每个条形的 高度 发生变化 以反映接收到的数据 因此 用户可以看到图表随着数据的接收而变化 我见过很多例子 但我看不到一个能够
  • 哪个 Actor 模型库/框架适用于 python 和 Erlang 类? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个易于学习的 Python 2 x Actor 库或框架 我尝试过 Candygram 和
  • 从 SSJS xPages 调用 jar 的类

    我想问一个关于在 xPages 上的 SSJS 服务器端 JavaScript 中使用 Java 类的问题 我创建了一个简单的 Java 类 HelloWorld 并将其导出到 jar 文件 然后我尝试在 xPage 上从 SSJS 调用它
  • React Native for iOS 中宽度、高度、填充等的默认单位是什么?

    我正在为 iOS 构建一个 React Native 应用程序 Facebook 文档说宽度 高度 填充 边距等需要一个数字 我想知道样式的默认单位是什么
  • 在 PHP 中高效地逐行读取大文件?

    我的应用程序读取一个 5MB 10MB 的大文件 该文件已使用 json 条目逐行输入 每一行都由一个解析器处理 该解析器被馈送到多个解析器并单独处理 一旦文件被读取 文件就会被移动 该程序不断地输入要处理的文件 该计划目前与 file g
  • IE7 仅忽略来自生产服务器的页面上的 CSS 属性选择器

    在我的网站上 IE7 似乎忽略了某些 CSS 属性选择器 奇怪的是 只有当页面来自生产服务器时才会发生这种情况 如果我有完全相同的代码在我的个人服务器上 或者保存在我的硬盘上 它工作得很好 这是导致该问题的示例
  • R 中的“不加入”

    我正在寻找一种快速的方法来 不加入 即保留未合并的行 或内部联接的逆 我一直在做的方法是使用 data table 作为 X 和 Y 然后设置键 例如 require data table X lt data table category
  • 在 OSX 中捕获媒体键(播放/暂停)

    研究 问题 中年危机 有一些问题here https stackoverflow com questions 2477068 listening to mac keyboard play pause events and there htt
  • JGit:检索与 git 提交关联的标签

    我想使用 JGit API 检索与特定提交哈希相关的标签 如果有的话 请提供相同的代码片段 Git 对象模型 http book git scm com 1 the git object model html将标签描述为包含有关特定对象的信
  • @Order注解对XML序列化顺序没有影响

    我正在使用 Retrofit 2SimpleXmlConverter我在创建 Soap 请求对象时遇到一个问题 该对象基本上是一个具有 4 个元素子元素的元素 每个子元素都是不同的数据类型 这里是XML我想要产生的输出 必须遵守元素顺序