使用 JAXB 编组只能包含多种子节点类型之一的 XML 节点(SharePoint 查询)

2024-05-13

我正在尝试创建 JAXB 带注释的类来生成基于 Microsoft SharePoint 的 XML查询模式 http://msdn.microsoft.com/en-us/library/ms467521%28v=office.14%29.aspx。我有一个SpWhereClause class:

@XmlType(name="Where")
@XmlAccessorType(XmlAccessType.FIELD)
public class SpWhereClause {

}

但我不确定如何构造/注释其属性。 A<Where>元素可以有许多不同类型的子元素(<Eq>, <BeginsWith>, <Contains>等等,让我们忽略<And> and <Or>暂时),但不能超过一个。Eq and BeginsWith是每个单独地的有效子女Where,但不能是这样的:

<Where>
    <Eq>...</Eq>
    <BeginsWith>...</BeginsWith>
</Where>

没有嵌套<Eq> and <BeginsWith> in an <Or>元素。

我的第一个想法是创建一个AbstractSpComparison类与<FieldRef> and <Value>所有比较的共同要素:

@XmlAccessorType(XmlAccessType.FIELD)
public abstract class AbstractSpComparison {

    @XmlElement
    private SpFieldRef fieldRef;

    @XmlElement
    private SpValue value;

    ...
}

然后有SpEqualsComparison扩展它:

@XmlType(name="Eq")
public class SpEqualsComparison extends AbstractSpComparison {

}

但是,在中使用抽象类SpWhereClause让我无法控制子元素的名称。这:

@XmlElement
private AbstractSpComparison comparison;

结果如下:

<Where>
    <comparison>...</comparison>
</Where>

而不是这个:

<WHERE>
    <Eq>...</Eq>
</WHERE>

为什么“Eq”这个名字不是来自SpEqualsComparison用于命名比较元素?处理这种情况的正确方法是什么?

我考虑将所有可能的子元素类型作为属性SpWhereClause,并且只设置我需要的一个(在某处有一些验证逻辑),但这似乎不必要地冗长。

如果重要的话,我正在使用弹簧OXM http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/oxm.html Jaxb2Marshaller.


您可以执行以下几种不同的选择:

选项1 -@XmlElementRef

如果一切都扩展了一个公共超类(即 AbstractSpComparison),那么您可以利用@XmlElementRef注解。当您执行此操作时,子元素将对应于@XmlRootElement引用对象的类上的注释。

@XmlElementRef
private AbstractSpComparison comparison;

了解更多信息

我在我的博客上写了更多关于这种方法的文章:

  • http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-substitution.html http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-substitution.html

选项#2 -@XmlElements

如果一切都没有扩展一个共同的超类,那么你可以利用@XmlElements注释,您可以在其中显式注释哪些元素可能出现以及它们对应的类:

@XmlElements({
    @XmlElement(name="Eq", type=Eq.class),
    @XmlElement(name="BeginsWith", type=BeginsWith.class)
})
private AbstractSpComparison comparison;

了解更多信息

我在我的博客上写了更多关于这种方法的文章:

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

使用 JAXB 编组只能包含多种子节点类型之一的 XML 节点(SharePoint 查询) 的相关文章

  • 类型已知,但方法指的是缺失类型

    我对 java 和 Eclipse 不太有经验 但遇到以下问题 我正在写类似的东西 Point3D myPoint myClass myMethod arg 我收到错误 方法 myMethod myType arg 引用缺失的类型 Poin
  • java 中的梵文 i18n

    我正在尝试使用来自互联网的示例 ttf 文件在 java 中使用 i18n 进行梵文 印地文 我可以加载资源包条目 还可以加载 ttf 并设置字体 但它不会根据需要呈现 jlabel 它显示块代替字符 如果我在 Eclipse 中调试 我可
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • 将 aspx 文件加载到 xmldocument 中

    我希望能够将 aspx 页面加载到 XmlDocument 变量中 我怎么做 这是我尝试过的 它期望 xml 文件而不是 aspx 页面 有没有办法将aspx页面即时转换为xml文档并加载它 谢谢 string filePath C Web
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • 避免 @Secured 注释的重复值

    我正在尝试使用以下方法来保护我的服务方法 Secured如下 public interface IUserService Secured ROLE ROLE1 ROLE ROLE2 ResponseEntity saveUser Creat
  • Time.valueOf 方法返回错误值

    我使用 Time valueOf 方法将字符串 09 00 00 转换为 Time 对象 如下所示 Time valueOf LocalTime parse 09 00 00 当我调用 getTime 来显示我得到的值时 28800000
  • ActiveMQ JNDI 查找问题

    尝试使用 JNDI 运行以下 ActiveMQ http activemq apache org jndi support html http ActiveMQ 20JNDI 并且我的 jboss server node lib 文件夹中有
  • 使用 Guava Ordering 对对象列表进行多条件排序

    我有一个类无法实现可比较 但需要根据 2 个字段进行排序 我怎样才能用番石榴实现这一目标 假设班级是 class X String stringValue java util Date dateValue 我有一个清单 List
  • 接口是否像对象一样对待?

    为什么下面的代码可以工作 interface I class A implements I public String toString return in a class B extends A public String toStrin
  • 如何在 spring-data 中强制使用 CrudRepository 进行预加载?

    我有一个实体 其中包含List就是这样lazy默认加载 interface MyEntityRepository extends CrudRepository
  • Janusgraph 0.3.2 + HBase 1.4.9 - 无法设置 graph.timestamps

    我在 Docker 容器中运行 Janusgraph 0 3 2 并尝试使用运行 HBase 1 4 9 的 AWS EMR 集群作为存储后端 我可以运行 gremlin server sh 但如果我尝试保存某些内容 我会得到粘贴在下面的堆
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • Proguard 正在破坏我的清洁度。 Gson 和泛型

    我有一个从持久性加载信息的函数 我只是以一种非常简单的方式告诉它的类型 该类称为SharedPreferencesHelper kt所以它是一个真正的生活问题解决者 fun
  • 以编程方式创建 FloatingActionButton(无需 xml)

    我很欣赏 Android 的 FloatingActionButton fab 功能 并希望在我的项目中的许多不同地方使用它们 现在 我有这样的东西 我有几个 xml 规范 除了 id 图标和 onclick 之外 所有这些规范都是相同的
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • 使用 Java 8 Spring 4 + MyBatis 集成问题

    使用 Java 8 1 8 0 60 Spring 4 2 1 和 MyBatis 3 3 0 时遇到以下异常 Sep 29 2015 11 02 58 AM org springframework context annotation A

随机推荐

  • 图像像素数据如何“扫描”图像像素?

    目标 查找仅包含黑色和透明像素的图像左侧的第一个黑色像素 我拥有的 我知道如何获取像素数据并拥有黑色和透明像素的数组 在这里找到它 https stackoverflow com a 1262893 358480 https stackov
  • 将小数修剪到 2 位 Bigquery

    我当前正在运行一个查询 该查询运行 sum 函数并除以该数字 目前我得到的值例如 0 0904246741698848 和 1 6419814808335567 我希望这些小数被修剪到小数点后 2 个空格 他们的模式是一个浮点数 这是我的代
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • android Spinner 和数组适配器以编程方式

    我正在尝试使用 ArrayAdapter 以编程方式创建 Spinner 这是在一个闭源 jar 中完成的 作为 Android 库项目的一部分 我没有任何资源访问权限 我想知道如何自定义布局和显示微调器的文本视图 EDIT 目前我正在使用
  • 使用 matplotlib 为水平条形图创建替代 y 轴标签

    这是我刚刚提出的问题的 更清晰的 转发 我的去身份化让人们感到困惑 你好 我是使用 matplotlib pyplot 在 python 中绘图的新手 并花了很多时间在这个网站和其他网站上搜索 并试图弄清楚这一点 但我还没有成功完成我想做的
  • 我应该如何格式化 .dat 文件以便制作 3D 矢量图?

    我正在为大学做这个编程任务 我们必须写一个c 计算 3D 空间中某些线圈的磁场矢量的程序 我已经成功编写了这个程序 并且我认为它运行得很好 不过 我想添加一个特殊的东西 这是我的试卷 所以它必须特别好 我想绘制出向量 我习惯打电话gnupl
  • 如何在 iPad 上使用 HTML5/Javascript 合成音频

    有没有人有工作示例代码 可以在 iPad 上的 Mobile Safari 上使用 HTML5 Javascript 合成 并播放 音频 我在网上找到了一些基于 javascript 的声音合成示例 但它们似乎都只能在 Firefox 中使
  • Mongoose 对 Promise 拒绝处理

    我有点与 NodeJS 中的 Promise 模式作斗争 我正在数据库中查找用户 然后使用用户引用保存新实体 但是当用户不在数据库中时 我应该返回拒绝 但我不确定如何正确执行 有没有办法做得更好 顺便说一句 对不起 咖啡脚本 User fi
  • Python 无服务器函数 Vercel - Next.js

    我发现我可以使用 Python 在内部创建一个无服务器函数Next js https nextjs org docs getting started项目 一旦部署到Vercel https vercel com 它将被转换为无服务器函数 我
  • org.springframework.security.oauth2.common.exceptions.InvalidGrantException:凭据错误

    我正在开发Spring Boot 授权服务器 OAuth 资源服务器 在这个例子中 我可以通过邮递员轻松查询spring microservices oauth 服务器并获取受保护的数据 我创建了客户端来访问邮递员正在执行的数据 但我遇到了
  • Grails 默认包名称

    我是 Grails 的新手 而且非常喜欢它 我想将我的课程放在像这样的包中org company project module model 重复对我来说很痛苦create domain class
  • 如何用X11复制到剪贴板?

    使用 OS X 上的框架 我可以使用以下命令将 PNG 复制到粘贴板 在 C 中 显然我可以将 NSPasteboard 与 Cocoa 一起使用 include
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • python 2.7.6 if/elif/else 语句中的 isupper 函数

    我需要 str isupper 函数的帮助 我试图在 if elif else 语句中使用它 程序是这样的 String raw input Please enter a string if String 1 isupper print T
  • 如何更改每次旋转的滑动刷新布局的颜色?

    有没有人注意到SwipeRefreshLayout在 Gmail 中 它会在一次加载迭代中为每次旋转更改颜色 有谁知道如何实现它 The 文档 https developer android com reference android su
  • 返回值的复制省略和 noexcept

    我有一个这样的函数模板 template
  • 递归BBCode解析

    我正在尝试解析脚本中的 BBCode 现在 它可以无缝工作 直到我尝试缩进不仅仅是粗体或下划线的 BBCode 例如剧透 网址 字体大小等 然后它就会搞砸 这是我的代码 function parse bbcode text global d
  • 十进制如何工作?

    我查看了 C 中的十进制 但我不能 100 确定它做了什么 有损吗 在C 写作中1 0000000000001f 1 0000000000001f结果是2使用时float double得到你2 0000000000002这是正确的 是否有可
  • 如何在.NET 3.5中进行动态对象创建和方法调用

    创建类对象的代码看起来如何 string myClass MyClass 上面的类型 然后调用 string myMethod MyMethod 在那个物体上 Use Type GetType string http msdn micros
  • 使用 JAXB 编组只能包含多种子节点类型之一的 XML 节点(SharePoint 查询)

    我正在尝试创建 JAXB 带注释的类来生成基于 Microsoft SharePoint 的 XML查询模式 http msdn microsoft com en us library ms467521 28v office 14 29 a