Jersey REST/ JAXB 错误,映射接口

2024-05-01

我必须使用 REST Web 服务中的接口。这是接口 Specs.java :

@XmlJavaTypeAdapter(MyAdapter.class)
public interface Specs {

    public BaseProperties getBaseProps();
    public void setBaseProps(BaseProperties baseProps);

}

MyAdapter.java:

public class MyAdapter extends XmlAdapter<Object,Object> 
{  
    public Object unmarshal(Object v) 
    { 
        return v; 
    }  
    public Object marshal(Object v) 
    { 
        return v; 
    }
}

RegSpecs.java

@XmlType
public class RegSpecs implements Specs{
private BaseProperties baseProps;

    public BaseProperties getBaseProps()
    {
        return baseProps;
    }
    public void setBaseProps(BaseProperties baseProps)
    {
        this.baseProps = baseProps;
    }

}

MapSpecs.java

@XmlType
public class MagSpecs implements Specs {

private BaseProperties baseProps;
private Features features;

    public BaseProperties getBaseProps()
    {
        return baseProps;
    }
    public void setBaseProps(BaseProperties baseProps)
    {
        this.baseProps = baseProps;
    }
    public Features getFeatures() {
        return features;
    }
    public void setFeatures(Features features) {
        this.features = features;
    }

}

访问此服务会引发以下错误:

javax.xml.bind.MarshalException - 带有链接异常: [javax.xml.bind.JAXBException:类Entity.MagSpecs及其任何超类在此上下文中都是已知的。]

如何修改我的上下文?我正在使用与 Jersey 1.5 捆绑在一起的 JAXB

Thanks !

编辑:为了更新我的上下文,我将此代码添加到我的客户端(资源)类中:

public class BookService  implements ContextResolver<JAXBContext> 
{

        private JAXBContext jaxbContext;

        public BookService() {
            try {
                // Bootstrap your JAXBContext will all necessary classes
                jaxbContext = JAXBContext.newInstance(Specs.class,MagSpecs.class, RegSpecs.class);
            } catch(Exception e) {
                throw new RuntimeException(e);
            }
        }

        public JAXBContext getContext(Class<?> clazz) {
            if(BookService.class == clazz) {
                return jaxbContext;
            }
            return null;
        }

在这种情况下我收到错误:

Entity.Specs 是一个接口,JAXB 无法处理接口。 该问题与以下位置有关: 在实体.规格 Entity.Specs 没有无参数默认构造函数。 该问题与以下位置有关: 在实体.规格


的客户Specs接口需要知道MagSpecs可以是它的一个实例,以便它知道出于工具目的而查看它。最简单的方法是放置一个@XmlSeeAlso上的注释Specs界面:

@XmlSeeAlso({ MagSpecs.class, RegSpecs.class })
@XmlJavaTypeAdapter(MyAdapter.class) // Never needed this annotation myself...
public interface Specs {
    public BaseProperties getBaseProps();
    public void setBaseProps(BaseProperties baseProps);
}

一般来说,每当我使用 JAXB 注释时,我都会确保编写大量测试来检查是否可以从相关类生成 XML 模式,并从类和接口网络的每个(正常)入口点进行检查我可以毫无例外地生成一个合理的模式。例如(我很抱歉这有点长):

private SchemaOutputResolver sink;
StringWriter schema;

@Before
public void init() {
    schema = new StringWriter();
    sink = new SchemaOutputResolver() {
        @Override
        public Result createOutput(String namespaceUri,
                String suggestedFileName) throws IOException {
            StreamResult sr = new StreamResult(schema);
            sr.setSystemId("/dev/null");
            return sr;
        }
    };
    Assert.assertTrue(schema.toString().isEmpty());
}

private void testJAXB(Class<?>... classes) throws Exception {
    JAXBContext.newInstance(classes).generateSchema(sink);
    Assert.assertTrue(schema.toString().length() > 0);
}

@Test
public void testJAXBForSpecs() throws Exception {
    testJAXB(Specs.class);
}

[编辑]:你也need改变Specs接口到一个类并让当前的实现继承它。如果您愿意,它可以是一个完全抽象的类。只要您没有在类中添加重要的功能,它就应该可以工作。

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

Jersey REST/ JAXB 错误,映射接口 的相关文章

随机推荐

  • maven-compiler-plugin 无法编译 Eclipse 没有问题的文件[重复]

    这个问题在这里已经有答案了 Eclipse 编译以下代码没有任何问题 而当mvn尝试编译此代码 结果编译失败 try Distribution rep get id returns a java util Optional Distribu
  • Python 请求与 PyCurl 性能

    Requests 库与 PyCurl 的性能相比如何 我的理解是 Requests 是 urllib 的 python 包装器 而 PyCurl 是本机 libcurl 的 python 包装器 因此 PyCurl 应该获得更好的性能 但不
  • Java - 哪个是 Graph 的最佳实现结构?

    图很大但是无向 边缘未加权 在我的实现中 我必须找到具有最大度数的顶点并在顶点和边上进行删除 链接列表 数组列表 地图 哪一种更适合我的实施 表示图的两个基本数据结构是 adjacency list the adjacency matrix
  • Angular 2子组件引用父组件

    我有一个包含三个组件的应用程序 应用程序 编辑视图 对话框 应用程序组件包含 EditView 组件 该组件可以包含许多其他 EditView 组件和一个 Dialog 组件 如果 Dialog 组件在页面上可见 对话框组件包含应用程序组件
  • 什么构成“有效”C 标识符?

    根据 Zaibis 的建议 并且与我自己的相关 answer to 宏名称的有效字符是什么 https stackoverflow com a 34315237 547214 也g 不允许的标识符中的 和其他 Unicode 字符 http
  • Timer 和 TimerTask - 如何从 TimerTask 运行中重新安排 Timer

    基本上我想做的是制作一个在 x 秒后运行特定 TimerTask 的计时器 但随后 TimerTask 可以重新安排计时器在 y 秒后执行任务 示例如下 它在我尝试在 TimerTask 运行中安排此任务的行上给出错误 线程 Timer 0
  • SwiftUI如何用TabView隐藏导航栏

    我正在使用 SwiftUITabView inside NavigationView 但我就是无法在iOS 13 0模拟器中隐藏导航栏 这是代码 import SwiftUI struct TestView View var body so
  • 模拟、存根和假对象之间有什么区别[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 尽管有大量资源 但即使在 SO 上 这些 Q A 中也仅对其中两个术语进行了比较 那么 简而言之 它们各自是什么 它们之间有何关系 或者他们根本就没有
  • 如何通过id获取消息discord.py

    我想知道如何通过消息 ID 获取消息 我努力了discord fetch message id and discord get message id 但两者都会提出 Command raised an exception Attribute
  • 如何从字符串中删除或替换所有标点符号?

    我有一个由单词组成的字符串 其中一些包含标点符号 我想删除它们 但我一直不知道如何做到这一点 例如 如果我有类似的东西 var words Hello this is a string 我希望能够创建一个数组 Hello this is a
  • Rails - 从对象哈希创建选择标签

    我需要根据哈希中的可用值创建一个选择框 例如 我有一个 事物 该 事物 有多种状态字段 1 gt State A 2 gt State B 通过事物上的方法可用 我如何从中构建一个选择标签 正如施罗克韦尔所说 Hash each a 返回以
  • 如何删除WKWebView中的缓存?

    任何一个合作过的人WKWebView并尝试清除缓存 如果是 该怎么做 有什么例子吗 P S Normal NSURLCache不管用 更新的 Swift 5 版本 WKWebsiteDataStore default removeData
  • 否定句子的算法

    我想知道是否有人熟悉算法句子否定的任何尝试 例如 给定一个句子 这本书很好 请提供任意数量的意思相反的替代句子 例如 这本书不好 甚至 这本书不好 显然 以高精度实现这一点可能超出了当前 NLP 的范围 但我确信在这个主题上已经有了一些工作
  • Bash 脚本问题

    我可以很好地运行这个命令 并得到我想要的输出 ifconfig eth0 grep HWaddr awk print 5 但是 当我将命令设置为变量并打印该变量时 出现错误 CASS INTERNAL ifconfig eth0 grep
  • 为什么使用 DIV 或 span 标签比使用表格布局“更好”? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么不在 HTML 中使用表格进行布局 https stackoverflow com questions 83073 why not use tables for layout in html 为
  • 输入实例不是 JSON 格式

    我正在使用 Google 的公共模板和示例来练习 GCP ML 引擎here https github com GoogleCloudPlatform cloudml samples tree master cloudml template
  • 从头开始使用映像部署无法启动

    我正在使用以下内容构建图像Dockerfile FROM golang 1 19 2 bullseye as builder COPY src src WORKDIR src RUN CGO ENABLED 1 go build race
  • 使用新的 iOS Facebook SDK API (3.0) 上传照片

    如何使用新的 API SDK 从 iOS 应用程序将照片上传到 Facebook 我已经尝试过 但一事无成 只能继续原地踏步 这是我目前拥有的代码 void dataForFaceboo self postParams NSMutableD
  • Jetpack Compose - 布局可重用组件

    为了练习 Jetpack Compose 中的可重用组件 我开始了一些练习 见下图 正如我想象的那样 绿色行 输入行以及之间的行具有相同的结构 第一个元素获得了可用空间 第二个元素获得了 50 dp 最后一个元素获得了 70 dp 我尝试将
  • Jersey REST/ JAXB 错误,映射接口

    我必须使用 REST Web 服务中的接口 这是接口 Specs java XmlJavaTypeAdapter MyAdapter class public interface Specs public BaseProperties ge