有没有办法将类作为参数传递给 JAXB XMLAdapter 或从另一个类访问 Getter 方法

2024-02-08

我正在尝试创建一个XMLAdapter我的一个对象的类。我需要访问Getters来自另一个类,以便可以从该类的 Getters` 填充某些对象,但我无法这样做。

基本上,我想访问我的Child class Getter内的方法XMLAdapter。我可以创建一个对象Child类和访问,但它的结果是NULL。最初,我正在填充Objects in the Child and Parent班级。我想访问相同的值XML Adapter所以我想知道是否有一种方法可以将类的引用传递给我的XMLAdapter.

我有以下内容Parent类将具有以下值:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlTransient
@XmlSeeAlso({Child.class})
public class Parent{
    private String eventID;
}

以下是我的Child编组期间将使用的类来创建XML:

@XmlRootElement(name = "child")
@XmlType(name = "child", propOrder = { "name","extension"})
public class Child extends Parent
{
    
    @XmlElement (name = "name") 
    private String name;
    
    @JsonIgnore
    @XmlJavaTypeAdapter (ExtensionAdapter.class)
    @XmlElement (name = "extension") 
    private Extension extension;

}

以下是我的扩展类:

@NoArgsConstructor
@AllArgsConstructor
@XmlAccessorType(XmlAccessType.FIELD)
public class Extension {
    private String eventID;
}

以下是我的XMLAdapter class:

public class ExtensionAdapter extends XmlAdapter<Child, Extension> {

    @Override
    public Extension unmarshal(Child valueType) throws Exception {
        System.out.println("UN-MARSHALLING");
        return null;
    }

    @Override
    public Child marshal(Extension boundType) throws Exception {
        System.out.println("MARSHALLING");
        System.out.println(boundType);
        //If I create the New child type then I am unable to access the eventID from its getter as Child class is nulll
        Child be = new Child();
        be.setEventID(boundType.getEventID());
        return be;
    }
}

基本上,我想访问Child glass Getter内的方法XMLAdapter这样我就可以填充我的Extension class EventID接着就,随即。我尝试了很多方法,但没有任何效果,所以我在这里发帖。

有什么办法可以让我通过Child类作为参数XMLAdapter这样我就可以访问Getter方法来自吗?因为如果我创建一个新对象Child类然后是它的所有Getter方法为空。但是一开始我就填充了中的所有字段Parent and Child类(名称和事件 ID)。我只想在其中填充相同的值Extension class eventID使用XMLAdapter.

我希望我能够解释这一需求。如果您有任何建议或示例代码,那么它将非常有用。

请注意:我在这里使用了非常示例代码。我知道我想要实现的任何目标都可以使用正确的 POJO 和 JAXB 注释来实现,但我的实际类很复杂,我不允许修改它。我所能添加的只是新的注释。因此,我试图使用XMLAdapter.


我想实现这样的目标,这样我就可以在不需要访问课程的情况下做到这一点。发布答案,以便将来对某人有用。

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.commons.lang3.NotImplementedException;

import io.openepcis.model.jaxb.MyAdapter.MapWrapper;

public class MyAdapter extends XmlAdapter<MapWrapper, Map<String, Object>> {

    private DocumentBuilder documentBuilder;

    public MyAdapter() throws Exception {
        documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    }

    @Override
    public Map<String, Object> unmarshal(MapWrapper valurType) throws Exception {
        throw new NotImplementedException();
    }

    @SuppressWarnings("unchecked")
    @Override
    public MapWrapper marshal(Map<String, Object> m) throws Exception {
        if (m == null) {
            return null;
        }
        MapWrapper wrapper = new MapWrapper();
        List elements = new ArrayList();
        for (Map.Entry<String, Object> property : m.entrySet()) {
            if (property.getValue() instanceof Map) {
                elements.add(new JAXBElement<MapWrapper>(new QName(getCleanLabel(property.getKey())), MapWrapper.class, marshal((Map) property
                                    .getValue())));

            } else {
                elements.add(new JAXBElement<String>(new QName(getCleanLabel(property.getKey())), String.class, property.getValue().toString()));
            }

        }
        wrapper.elements = elements;
        return wrapper;

    }

    // Return a XML-safe attribute. Might want to add camel case support
    private String getCleanLabel(String attributeLabel) {
        attributeLabel = attributeLabel.replaceAll("[()]", "").replaceAll("[^\\w\\s]", "_").replaceAll(" ", "_");
        return attributeLabel;
    }

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

有没有办法将类作为参数传递给 JAXB XMLAdapter 或从另一个类访问 Getter 方法 的相关文章

  • 使用 Intellij 2017.2 /out 目录构建会重复 /build 目录中的文件

    更新到 Intellij 2017 2 后 构建我的项目会创建一个 out包含生成的源文件和资源文件的目录 这些文件与已包含的文件重复 build并导致duplicate class生成的类的编译器错误 关于 Gradle 或 Intell
  • IntelliJ Ultimate 在 Play 2.3 (Java) 项目测试中找不到路由

    虽然我的测试运行得很好 但 IntelliJ 抱怨它找不到路由对象 并且代码自动完成无法工作 我已经查看了所有文档 这应该可以工作 这是 IntelliJ 的报告内容 关于我的项目配置可能有什么问题有什么想法吗 这很可能与以下事实有关 ro
  • 如何避免 Java 中的忙旋转

    我有一个多线程应用程序 其中一个线程向另一个线程发送消息 等待线程轮询消息并做出反应 处理锁 像这样 等待线程代码 while true if helloArrived System out println Got hello if bye
  • 向 JList 添加滚动条? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何将 JList 添加到 JScrollPane 把你的JList in a JScrollPane JScrollPane scrol
  • 如何让 HttpClient 返回状态码和响应正文?

    我试图让 Apache HttpClient 触发 HTTP 请求 然后显示 HTTP 响应代码 200 404 500 等 以及 HTTP 响应正文 文本字符串 重要的是要注意我正在使用v4 2 2因为大多数 HttpClient 示例都
  • JFreeChart - 创建移动图表时出现问题

    我在我的 java 应用程序中使用 JFreeChart Problem 我想绘制一个XY面积图 whose 域轴 x 轴 当我们开始绘制数据时应该自动水平滚动 我在中看到了同样的事情时间序列图表但我不想要任何时间系列图表 我只想要滚动的
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • 有界通配符相关的编译器错误

    我想知道这段代码有什么问题 Map 但我试图说得更具体 这个问题在这个旧的 Apache 线程 ht
  • 读取不失真的灰度 PNG 图像文件

    我需要读取和处理大量的灰度 PNG 文件 我的意思是 如果它们在 Photoshop 或 GIMP 中打开 则图像模式为灰度 而不是具有灰度值的 RGB 图像 ImageIO 似乎没有实现这一点 它似乎将所有图像文件视为 sRGB 这会破坏
  • 如何在不同的班级中启动和停止计时器?

    我想测量从传入 HTTP 请求开始到应用程序到达某个点的时间 这两个时间点都位于不同的类中 我将如何启动和停止这些不同类别的计时器 我没有看到使用 MeterRegistry 中的 命名 计时器的方法 我该怎么办呢 您可以使用 AOP 如下
  • 如何在Java中通过反射调用代理(Spring AOP)上的方法?

    一个接口 public interface Manager Object read Long id 实现该接口的类 Transactional Public class ManagerImpl implements Manager Over
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • XML 和 XSLT:需要它仅对某些子节点进行排序

    我需要让 XSLT 样式表对 XML 文件的子节点进行排序 但仅限某些子节点 下面是 XML 的示例
  • 如何从Java中的连接获取查询字符串?

    我正在编写一个方法 尝试记录数据库调用 形成连接到它的连接 在查询之后 有很多地方调用方法 connect 来启动并调用 cleanUp 方法来结束 我不能并且不想修改每个地方 所以顺序是这样的 Connection con connect
  • Eclipse 在单独的窗口中打开代码

    我正在 eclipse 中编程 在两个显示器设置上运行 在其中一台显示器上 我只获得了项目资源管理器和编辑器作为自定义透视图 而在另一台显示器上 我获得了其他工具 例如控制台 调试 任务 变量 断点等 例如 当我单击任务视图中的任务时 这将
  • 有没有办法处理Java堆空间异常[重复]

    这个问题在这里已经有答案了 我正在寻找将文件输入流转换为大文件 文件大小为 100MB 并且抛出 java lang OutOfMemoryError Java Heap space import java io FileInputStre
  • 文档过滤器在 Java 中不起作用?

    在超过 10 个字符的文本字段中 它必须显示错误 为此 我使用了文档过滤器 JTextField field JTextField txtFld AbstractDocument document AbstractDocument fiel
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i
  • 删除Java中重载的方法

    有2个重载方法 这些方法中的每一个都将一种类型的列表转换为不同类型的列表 但第一种方法使用比较器 class SomeClass public static
  • 用 lambda 表达式替换匿名函数

    我在 Java 8 映射操作中传递一个函数 Intellij 告诉我它可以用 lambda 表达式替换 但我不知道如何在不创建中间对象结构的情况下做到这一点 这就是我所做的 List

随机推荐

  • 从结构体数组中删除元素

    这可能是一个超级简单的问题 但它是 我有一个 结构数组 以及一个要删除的结构数组索引向量 例如 如果我有一个删除向量 2 6 这意味着我想删除数组中的第二个和第六个结构 并且数组将短 2 个元素 干净 简单的 matlab 方法是什么 如果
  • 在 JavaScript 中,如何在超时中包装承诺?

    使用 deferred promise 实现某些异步函数的超时是一种常见的模式 Create a Deferred and return its Promise function timeout funct args time var df
  • 如何在 geom_dotplot 中使用颜色?

    我有这个点图 ggplot mpg aes drv hwy geom dotplot binwidth 1 binaxis y stackdir center 呈现为 我想按制造商对点进行着色 如果我添加一个fill审美的 ggplot m
  • 在没有故事板的情况下创建和执行 Segue

    我有一个没有故事板的应用程序 所有 UI 创建都是用代码完成的 我得到了splitView我想让它在 iPhone 上使用 因为该应用程序最初是为 iPad 设计的 因此当您在主视图中选择列表中的一行时 它在 iPhone 上不会执行任何操
  • 为什么 Z3 中的运算符“/”和“div”给出不同的结果?

    我试图用两个整数来表示一个实数 并将它们用作实数的分子和分母 我写了以下程序 declare const a Int declare const b Int declare const f Real assert f a b assert
  • Visual Studio 2012 - 数据库项目 - 设置默认的发布配置文件

    只是想知道是否有人知道如何将保存的发布配置文件设置为默认配置文件 即当我选择发布时自动加载的配置文件 我喜欢新的配置文件方法 但在开发过程中我有点不愿意一遍又一遍地重新选择相同的配置文件 在 VS2012 及更高版本中 您可以通过右键单击
  • Tensorflow 模型导入到 Java

    我一直在尝试在 Java 中导入和使用我训练过的模型 Tensorflow Python 我能够在 Python 中保存模型 但当我尝试在 Java 中使用相同的模型进行预测时遇到问题 Here https gist github com
  • 在 IB 中使用自动布局,如何以编程方式将 UIView 放置在屏幕中央?

    我有一个 UIView 我想在主视图上水平居中 然后在主视图上垂直居中 减去大约 14 像素 如果我用 IB 设置它 它可以在 Retina 3 5 上运行 但在 Retina 4 上运行时 它当然会偏离大约 40 像素 我认为最好的解决方
  • 请求被中止:无法创建 SSL/TLS 安全通道。

    我想实现 Paypal dodirect 方法 让用户可以直接在我的网站上付款 而不是重定向到用户 因此我已将此 URL 添加为https www sandbox paypal com wsdl PayPalSvc wsdl https w
  • 安全注意事项 - ChromeDriver - Chrome 的 Webdriver

    我想知道是否有人了解有关此声明所涉及的使用 chromedriver 的具体风险的更多信息 如果可能 请使用无法访问敏感本地或网络数据的测试帐户运行 ChromeDriver ChromeDriver 永远不应该使用特权帐户运行 想知道使用
  • 如何开始使用 Delphi 创建我自己的类?

    我已经发布一个问题 https stackoverflow com questions 11270972 declare locally or globally in delphi几天前 答案告诉我创建自己的课程 我是一名来自 OOP 时代
  • 在 Rust 中确定 DynamicImage 的位深度

    如何确定一个位深度image DynamicImage生锈了 我在用着fltk rs https docs rs fltk 0 11 6 fltk function https docs rs fltk 0 11 6 fltk image
  • javascript中双精度到字节数组的转换

    我正在尝试将一些 Java 代码转换为我正在开发的应用程序所需的 JavaScript 我被困在一个类及其方法上 这些方法将 double 类型的变量转换为 long 然后将 long 转换为由表示该 long 数字的 8 个字节组成的字节
  • 为什么不总是使用 GUID 而不是整数 ID?

    使用 GUID 有哪些缺点 为什么不总是默认使用它们呢 其一 整数的连接速度要快得多 当处理数百万行时 这一点尤其重要 对于两个来说 GUID 比整数占用更多的空间 同样 在处理数百万行时非常重要 对于三个来说 GUID 有时采用不同的格式
  • AVI 文件的 Flash 视频播放器(免费用于商业用途)

    是否有可免费用于商业用途且能够播放 AVI 文件的 Flash 视频播放器 JW Player 是不可能的 因为在自述文件中它指出公司的使用被视为商业用途 需要不同的许可证 Flash 本身并不处理 AVI 容器格式 它只能播放符合某些特定
  • 如何在 Flutter 移动应用程序的 API 调用中传递基本身份验证凭据?

    我正在开发一个简单的 Flutter 移动应用程序 需要调用使用基本身份验证的 API 我可以使用电子邮件和密码凭证来访问 Postman 中的 API 它会在执行请求之前以 Base64 格式对电子邮件和密码进行编码 我假设用 分隔 我不
  • 为什么我的 RSS 源会重复某些条目?

    当使用 Thunderbird 提要阅读器阅读我的 RSS 提要时 某些条目是重复的 谷歌读者 https en wikipedia org wiki Google Reader没有同样的问题 这是错误的 feed http plcoder
  • Oracle 中的视图和物化视图有什么区别?

    Oracle 中的视图和物化视图有什么区别 物化视图基于磁盘 并根据查询定义定期更新 视图只是虚拟的 每次访问时都会运行查询定义
  • 获取对象类型并相应地分配值

    我有一个数组列表不同类型的值其中 第一个值 gt string 第二个值 gt datetime 第三个值 gt boolean第四个值是int 我如何找到它们的类型并相应地分配值 任何帮助将不胜感激 这是我的代码 foreach obje
  • 有没有办法将类作为参数传递给 JAXB XMLAdapter 或从另一个类访问 Getter 方法

    我正在尝试创建一个XMLAdapter我的一个对象的类 我需要访问Getters来自另一个类 以便可以从该类的 Getters 填充某些对象 但我无法这样做 基本上 我想访问我的Child class Getter内的方法XMLAdapte