问题标签 [moxy]
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.
hibernate - (moxy) jaxb 编组和休眠代理对象
在过去的几天里,我尝试使用 MOXy JAXB 来支持 Hibernate 模型的 XML 编组/解组。尝试这样做时,我遇到了休眠代理对象的问题。考虑类似的事情:
我尝试通过以下方式使用 MOXy JAXB 映射此代码:
我的问题是休眠实例化了通过在用户上调用 getAddress() 获得的地址的代理对象。然后,当 JAXB 尝试封送对象时,它无法发现它实际上是它正在尝试封送的 CoolAddress,这导致 CoolAddress 中的属性没有被封送。
我已经搜索/考虑了以下可能的解决方案:
- 以某种方式从 JAXB 获得回调,允许我将正在编组的对象替换为另一个对象。这将允许我从代理获取真实对象。
- 触摸模型中的所有对象,这将使休眠获取真实对象。除了手动运行所有非瞬态属性之外,我还没有找到任何聪明的方法,这很乏味。
- 设置休眠以在我正在编组模型的会话中使用急切获取。
我正在寻找替代建议,或者是否可以(并且容易)实施上述建议之一。任何帮助表示赞赏:)。
java - moxy jaxb 中的 XmlAdapter 和 XmlIDREF
我正在尝试使用 MOXy JAXB 来序列化一个类 A,它看起来像:
关键是“foos”字段中的 Foo 对象是 fooBar 映射中的对象的超集。因此,我想将“fooBar”映射的关键元素“链接”到“foos”列表中的相应元素。我已经尝试过使用 XmlID 和 XmlIDREF 注释:
然后在我的 XmlAdapter 中,我尝试在适应的地图条目的 foo 对象上使用 XmlIDREF 注释:
当封送上面的代码按预期工作并生成以下 XML 时:
为了测试解组,我使用以下测试代码:
此代码产生(对我而言)意外结果:
也就是说,在映射中用作键的 Foo 对象为空。如果我更改映射适配器并编组 Foo 对象两次,而不是使用 ID 引用,我不会得到这个空指针。
我已经能够使用 JAXB-RI 在 google 上找到一些关于此的帖子,其中问题可以通过编写 IDResolver 来解决,如http://weblogs.java.net/blog/2005/08/15/pluggable-中所述ididref-handling-jaxb-20。不幸的是,我无法在 MOXy JAXB JavaDoc 中找到有关此类的任何信息。
解决方法的建议 从 Blaise Doughan 的回答中,我意识到这是 JAXB 的 MOXy 实现中的一个错误。我已经能够为这个错误制定一个(丑陋的)解决方法。这个想法是,地图不是使用 XMLAdapter,而是在其定义类中“转换”。A 类现在看起来像:
在解组之后,现在需要调用 transferFromListToMap 方法。因此,在获得对 newA 的引用后,应立即添加以下行:
任何关于更好的解决方法/错误修复的建议将不胜感激:)。
java - 无法让简单的 XmlAdapter 工作
我正在尝试让 HashMap 的 XmlAdapter 工作,但我不断收到异常。我非常密切地关注这个博客条目,并且我已经多次检查我的代码但我没有看到问题。
我正在使用最新版本的org.eclipse.persistence.jaxb.JAXBContextFactory
作为我的 JAXB 提供程序。
这是我的 XML 示例:
按照上面提到的博客文章中的步骤:
1. 识别不可映射的类
我正在尝试映射一个java.util.HashMap
.
2. 创建一个可映射的等价类
3. 创建一个 XmlAdapter 在不可映射对象和可映射对象之间进行转换
4. 指定 XmlAdapter
我添加了下一步,我称之为 5. Stack Trace
异常描述非常清楚,但我看不到我试图将 a 转换MappingType
为 a 的位置HashMap
。有时输入一个问题会引导我找到答案,但这次不是。
我敢肯定这很简单-如果您发现我的错误,请指出!
谢谢!
顺便说一句,Blaise Doughan 的博客充满了很棒的 JAXB 和 MOXy 信息,值得一试。
java - 使用 MOXy 和 XPath,是否可以解组属性列表?
编辑:这是我加载 XML 文档的方式,正如我在 Blaise 的回答中使用的那样。我这样加载它是因为我想使用一个节点,而不是整个文档。即使使用整个文档,我在以这种方式加载时仍然遇到问题。
我的 XML 看起来像这样:
还有一个类:
上面的代码不管我有没有都可以工作@XmlElement
,我得到一个包含[cookie,crackers]的ArrayList。
如果我将上面的声明更改为
我的 ArrayList 是空的。
我的最终目标是只有属性,所以我的 XML 看起来像这样:
我正在尝试做的是,使用 XPath 提取属性列表,可能吗?如果是,如何?
谢谢你。
java - moxy jaxb @XmlID 和继承
我有以下层次结构:
我试图编组 Baz 类的地方:
我正在使用以下测试代码:
不幸的是,在执行元帅时,我遇到了以下异常:
我希望 XmlID 注释将由 Big 类继承。我尝试在 Big 类中添加“另一个”@XmlID 注释,这解决了编组问题。然而,这会在生成 XML 模式时导致另一个问题,该模式现在将包含两个 ID 属性,这是不允许的。
难道我做错了什么?
java - 我可以用代码替换 jaxb.properties 吗?
我正在使用 EclipseLink 的 JAXB 实现中的一些非标准扩展,为了启用该实现,我必须使用 jaxb.properties 对其进行配置。效果很好。
但是,由于构建错误,属性文件没有包含在正确的位置,导致使用默认的 JAXB,它没有任何错误只是继续解析 XML 文件,忽略非标准扩展名,给我留下了一个非工作豆。
为了使它更健壮,我想摆脱属性文件并在代码中指定上下文配置。由于它们的注释,我已经对 EclipseLink 有一个编译时依赖项,并且我不需要在部署时可配置这部分(事实上,看看会出现什么问题,我不希望它可配置)。
java - 使用 @XmlPath 和命名空间时从 MOXy JAXB 生成的 XML 架构中的错误
我正在尝试将 java 模型映射到一些 XML 中。为此,我使用了 JAXB 的 MOXy 实现。我在从 java 模型生成有效的 XML Schema 时遇到了一些麻烦。我使用以下模型:
我正在使用以下代码生成架构:
我使用以下 package-info.java 文件:
运行测试时,我获得以下架构:
可以看出,最后一个属性元素并不是人们所期望的。如果我删除 package-info.java 文件,则会生成以下架构:
这是我期望生成的。有谁知道为什么会这样?
java - Eclipse indigo 中的 Jaxb 项目
当我在 eclipse indigo 中创建一个 jaxb 项目时,它告诉我“当前选择的 JAXB 库提供程序无效”,即 eclipselink2.3.0-Indigo 我尝试了 javanet 下载 jar,但没有成功。我可以尝试此处描述的演示中的示例: http : //wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted,但 MOXy 自定义部分除外。当我运行时没有错误,它似乎没有做任何事情。
我错过了什么。提前致谢。卡迈勒
annotations - JAXB Moxy-关于如何注释 xsd 复杂类型的字段的问题
我开始使用 JaxB 并且正在使用 Moxy 实现。我有一个使用 Jaxb 转换为 Java 对象模型的行业标准 xsd。我已经对字符串、整数和日期等简单字段进行了注释。
我一直在搜索,需要指出正确的方向来注释以下字段,该字段是一个 xsd 复杂类型,具有 4 个属性和一个可选的字符串元素。生成的代码的子集如下:
条件.java
光盘
Cd.java 类将用于许多其他类,不仅在Conditions.java 类中。
我的问题尤其是如何在Conditions.java 中为problemType 的字段添加注释,其中problemType 有4 个属性和一个可选元素。
我将无法直接注释 Cd.java,因为 xml 输入会根据我正在实现的类而有所不同(选择使用 Cd.java 类的 8 个其他类)。上面的现有注解是由 Jaxb 自动生成的。Conditions.java 问题类型的 xml 输入如下:
请告知我需要在哪里澄清我的问题。最终,我请求资源或教程来帮助我完成这个。
** * ***更新* ** * ** * Blaise 的解决方案运行良好,因为我在另一个不那么复杂的项目上对其进行了测试。因此,该方法是正确的,但是元数据文件有些问题。我更新了上面的Conditions.java 文件,因为我遗漏了可能影响我需要实现元数据文件的方式的细节。
我的 oxm.xml 文件
*主要课程*
binding - 另一个 Jaxb 绑定问题
我想我终于缩小了我的问题之一。我正在使用带有 Moxy 实现的 Jaxb。我在绑定文件中使用 Xpath 表示法。我没有得到想要的结果。
原来的 jaxb 生成的类是重度嵌套的,为了测试,我把代码精简到了 Condition.java 下面。
条件.java
我创建的类:conditionConnect.java
我的第一个测试是创建一个对象模型,并将其编组为 xml。这是使用以下代码成功完成的:
输出是如此(成功!):
由于我将通过 xml 字符串/文件接收数据,因此我选择使用绑定文件。为 Condition 类提供的摘录如下
问题.xml - 数据输入
我的绑定文件(conditionsBinding.xml)
带有绑定和 xml 输入的主代码:
上述主代码的输出:
问题: 在进行绑定时,标签
出来是空的,我试图将 Cd 链接到问题类型,所以问题类型的 xml 输出应该是这样的:
请告知绑定文件中我缺少的内容。
编辑:binding.xml 文件。我使用此文件将 xml 元素名称编组为 java 对象中的变量名称:
注意:我已经测试了没有 binding.xml 的代码,它给了我相同的结果,但元素名称不同。没有 binding.xml 的 Main.java 代码如下:
没有 binding.xml 文件的输出:
Java 类/字段名称到问题.xml 文件的映射如下:
在 questions.xml 文件中的进一步说明,用于:
在我的 conditionsBinding.xml 文件中,我的 Problem_Type 编码如下:
我这样做的原因是 Problem_Type 没有根元素或 name="some_field",我最初尝试在 conditionsBinding.xml 中做:
当我这样做时,我没有得到问题类型的代码行,所以我添加了一个 name="some_field" 来测试也许这可能是我的问题。我正在关注 moxy wiki 中的示例,但有一些明显的东西我遗漏了,但我无法确定它。
附加编辑:
通过以下提供的答案更改 conditionsBinding.xml 后,我能够获得相同的 xml 输出。但是,problemType应该是一个属性列表,所以我把代码改成如下: conditionsBinding.xml
输出如下(空的问题类型标签):
Cd.java的摘录
另一方面,我意识到我需要稍后注释问题代码,这也是条件.java 中的一个字段,类型为 Cd,但将映射到不同的 xml 元素名称。这将需要在 conditionsBinding.xml 文件中添加另一个 Cd.java 注释块。(映射不是真实的,但它会反映如下内容:
伪条件Binding.xml:
这让我觉得我的方法需要调整(不是单独取决于绑定)。我正在阅读 http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy上的 moxy 用户指南。我研究并考虑了以下选项:JPA(使用 SAX/DOM - 在中间映射中相遇)、xml-join-nodes 和 xml-adapter。我不完全清楚这些选项中的哪一个(如果有的话)对我的问题有帮助,非常感谢您的专家建议。