问题标签 [oxm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9164 浏览

java - JAXB HashMap 不可映射

我想将 POJO 类中的 HashMap 转换为 XML。我尝试使用 XmlAdapter,但它只导致 HashMap 的键和值对成为 XML 元素的属性。我需要 Key 是 Element 本身,而 HashMap 的值是元素的值。例如,我需要以下 XML:

我创建了以下类: MyMapType 包含一个 MyMapEntryType 类的列表,该类有两个字段,即 Key 和 Value。如何将 Key 元素更改为 @XmlElement 并将 value 字段分配给 Key 字段?


这是我的源文件。

MyMapType.java

MyMapEntryType.java

另请查找适配器类:

MyMapAdapter.java

这是具有 HashMap 字段的类:

XmlElementMap.java


请告知如何实现这一目标。

问候,
-阿南德

目前它产生以下输出:

0 投票
1 回答
1754 浏览

jaxb - JAXB-Eclipselink:将抽象“getter”映射到 XML

我正在使用 JAXB 的 EclipseLink 实现(2.3)将 POJO 映射到 XML,并遇到以下用例的问题:

我在外部绑定文件中完全定义映射本身,我将 A 类设置为瞬态,如下所示:

对于 B 类:

现在,在编组时,我得到了异常:“在类 [bar.B] 上找到名为 [x] 的重复属性”,我认为它来自 A 中的抽象声明,被 B 继承。

将 B 的访问器类型设置为 FIELD,消除了这个错误,不幸的是,这不是一个选项,因为我在 B 中有一个额外的属性来编组,它不返回字段而是计算值,所以我被 PROPERTY 卡住了(以下工作:将 B 的访问器类型设置为 FIELD 并使用 @XmlPath 注释映射额外的属性 - 但我不想在我的代码中添加注释)。

被 B 类的访问器类型属性卡住了,我的下一个尝试是:

防止抽象属性被B继承,这让我:

使用此映射也会发生同样的情况:

在这两种情况下,属性“x”都会被忽略。

我现在真的花了很多时间在这上面 - 我无法想象它不可能让它工作?

我目前的解决方法:

将 foo.A 保留为瞬态,为 bar.B 指定访问器类型 FIELD(这让我没有问题地获得属性“x”)并使用代码中的注释映射 B 中的额外属性。但如前所述:我想在没有注释的情况下完全解决这个问题——有人知道吗?布莱斯?:)

问候,

--qu

0 投票
0 回答
174 浏览

java - I am having problems annotating model classes to support desired XML unmarshalling

I am interested in using a OXM framework to support unmarshalling of the following XML that will be passed as the HTTP POST payload of a request to a RESTful API call.

This is my first time trying to use a OXM framework and I am having problems annotating my model classes correctly. I am using Spring 3.0 and the JAXB2 Marshaller, but I am indifferent as to the specific marshaller implementation.

Questions:

1) What is the best strategy for annotating my model classes to reflect my desired XML structure? I have an example of how I have been annotating my classes below, and it is resulting in Class has two properties with the same name "XXX" for my XmlElements when I try to create the Marshaller.

2) What strategy can I take to support in my annotations and classes? I was defining SpatialExtent as an interface and then the class that implements a GeoBoundingBox XmlElement implemented this interface. This works for Java but not for JAXB.

3) Are there any places where the desired XML can be improved to simplify marshalling/unmarshalling?

Any help is appreciated! --Stephan

Background:

Here is an example of the XML I would like to consume:

GeoBoundingBox and TimePeriod are not the only possible types for spatial and temporal extents, but I have not had to define any other types as of yet.

I am using Spring package annotations.

An example of how I have been annotating my model classes:

All XmlElements annotations are on class methods that reference model objects and all XmlAttribute annotations are on class methods that reference datatypes (e.g. private String id).

I have an early XSD:

0 投票
1 回答
1966 浏览

marshalling - 如何告诉 castor 将一个空字段编组为一个空标签?

我正在编组一个可以将某些字段设置为空的对象。我正在使用带有 xml 映射文件的 castor 进行配置。我正在编组的课程是这样的:

...和这样的映射文件:

如果该字段为空(简化示例),我现在得到什么:

虽然我想在生成的 XML 中有一个空标签,即使描述字段为空。

0 投票
1 回答
745 浏览

jaxb2 - JAXB(MOXy) - 将一个模型对象映射到不同的模式

我在为不同的模式映射一个模型对象(例如:GroupHeader)时遇到问题。这个模式中的每一个都有不同的命名空间,但是一些复杂类型在它们中的每一个中都有几乎相同的结构。所以我想将此元素映射到一个 java 对象。是否可以使用 JAXB 来实现这一点?

第一个架构:

第二种模式:

对不起我的英语不好:)

0 投票
1 回答
1207 浏览

java - 如何在基于 Spring DAO 的应用程序中实现 xml?

在我的项目中,我使用了 JSF 和 SpringDAO 以及 web 服务。我正在调用各种返回 XML 的 web 服务,我需要解析和使用这个 XML。所以我的问题是......我可以使用什么?

默认情况下,我可以检查 Spring 中的任何内容吗?我是否需要单独解析我的内容并通过核心 java 代码使用它?或者别的什么...

在这种情况下可以做什么?

0 投票
6 回答
8583 浏览

java - Spring:解组 XML 字符串时出现 OXM 错误(castor)

我正在做 Spring Integration 项目。我想通过解组转换器将 XML 字符串发布到一个通道并在另一个通道中接收 Java 对象。

在我的 Spring 配置中,我使用了这些通道和 bean:

我正在单元测试中尝试这个,所以我有自动连接的通道可以使用:

我想要解组的贸易类是非常微不足道的 POJO:

这是我的 JUnit 测试方法,但在第 3 行出现异常:

最后是堆栈跟踪:

0 投票
1 回答
275 浏览

xstream - 如何将特定字段添加到由 xstream 映射的输出 xml

我有一个要映射到 XML 的 POJO。我为此使用 XStream。

例如:

和相应的 XML 将是,

但我的要求是在开始时只有一次日期字段和员工列表。像这样,

如何将不同的元素添加到 XStream 生成的 XML 中。我尝试过使用带有日期和员工名单的 POJO。日期像这样被打印了好几次,

0 投票
2 回答
1142 浏览

java - Configure XStream to dynamically map to different objects

I am hitting a RESTful 3rd party API that always sends JSON in the following format:

Where ... is the response object that needs to be mapped back to a Java POJO. For instance, sometimes the JSON will contain data that should be mapped back to a Fruit POJO:

...and sometimes the JSON will contain data that should be mapped back to an Employee POJO:

So depending on the RESTful API call, we need these two JSON results mapped back to one of the two:

Unfortunately, I cannot change the fact that this 3rd party REST service always sends back a { "response": { ... } } JSON result. But I still need a way to configure a mapper to dynamically map such a response back to either a Fruit or an Employee.

First, I tried Jackson with limited success, but it wasn't as configurable as I wanted it to be. So now I am trying to use XStream with its JettisonMappedXmlDriver for mapping JSON back to POJOs. Here's the prototype code I have:

Unfortunately when I run this I get an exception, because I have xs.alias("response", ...) mapping response to 2 different Java objects:

So I ask: what can I do to circumvent the fact that the API will always send back the same "wrapper" response JSON object? The only thing I can think of is first doing a String-replace like so:

But this seems like an ugly hack. Does XStream (or another mapping framework) provide anything that would help me out in this particular case? Thansk in advance.

0 投票
1 回答
3007 浏览

java - 如何让 XStream 映射回类型列表?

我正在使用 XStream 将一些 JSON 映射回 Java 对象。我将处理一个可能如下所示的 JSON 字符串:

更新:相信这个 JSON 可以解释为:

此 JSON 表示包含对象的未命名widgets对象。反过来,该widgets对象包含一组其他未命名的对象。这些未命名的对象中的每一个都包含两个属性:widget_namewidget_type

这里的每一个都Widget对应widgetlist一个 POJO:

我希望将上面的 JSON 字符串映射回 a List<Widget>,但我似乎无法弄清楚如何正确地为类命名:

我怎样才能让xs映射器翻译widgetlist成一个List<Widget>提前致谢。