Spring RESTful客户端:根标签异常

2024-02-25

我正在尝试按照此示例使用 RestTemplate 解析 RESTFull 调用的结果http://thekspace.com/home/component/content/article/57-restful-clients-in-spring-3.html http://thekspace.com/home/component/content/article/57-restful-clients-in-spring-3.html

XML 响应类似于:

<brands>
    <brand>
        <nodeRef>1111111</nodeRef>
        <name>Test</name>
    </brand>
</brands>

首先,我像这样配置了 application-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
        <property name="messageConverters">
            <list>
                <bean id="messageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
                    <property name="marshaller" ref="xstreamMarshaller" />
                    <property name="unmarshaller" ref="xstreamMarshaller" />
                </bean>
            </list>
        </property>
    </bean>

    <bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
        <property name="aliases">
            <props>
                <prop key="brand">com.kipcast.dataModel.drugs.bean.BrandViewList</prop>
            </props>
        </property>
    </bean>


</beans>

com.kipcast.dataModel.drugs.bean.BrandViewList 类是一个定义了 @XStreamAlias("brand") 的 bean。

这是我如何进行其余的调用:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml", WebscriptCaller.class); 
RestTemplate restTemplate = applicationContext.getBean("restTemplate", RestTemplate.class);     

String url = "http://localhost:8081/alfresco/service/search/brand.xml?q={keyword}&alf_ticket={ticket}"; 
List<BrandViewList> results = (List<BrandViewList>) restTemplate.getForObject(url, List.class, params);

WebscriptCaller.class 是我执行这些指令的类。

当我尝试执行该操作时, getForObject() 失败并且出现该异常:

XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.mapper.CannotResolveClassException: brands

我的问题是,我该如何解决这个问题?为什么我会收到这种异常?我怎样才能告诉他跳过根标签?

- - - - - - - 更新 - - - - - - -
修复了一些问题,特别是:

List<Brand> brandViewList = (List<Brand>) restTemplate.getForObject(url, Brand.class, params);

但现在的结果是:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read [class com.kipcast.dataModel.drugs.bean.Brand]; nested exception is org.springframework.oxm.UnmarshallingFailureException: XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.converters.ConversionException: nodeRef : nodeRef
---- Debugging information ----
message             : nodeRef
cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message       : nodeRef
class               : java.util.ArrayList
required-type       : java.util.ArrayList
converter-type      : com.thoughtworks.xstream.converters.collections.CollectionConverter
path                : /brands/brand/nodeRef
line number         : 3
class[1]            : com.kipcast.dataModel.drugs.bean.Brands
converter-type[1]   : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
version             : null
-------------------------------

编辑:更新为仅包含相关信息

最好有不同的类来处理“品牌”和“品牌”标签。我会创建一个Brand类,重命名BrandList to Brands(为了更接近它们引用的 XML 部分),并让Brands hold a List<Brand>。为这两个类添加正确的注释,您应该完成,例如:

@XStreamAlias("brands")
class Brands {
  @XStreamImplicit
  List<Brand> brand;
}

@XStreamAlias("brand")
class Brand {
  String nodeRef;
  String name;
}

上面的代码在将对象编组到 XML 时工作得很好,但在从 XML 解组到对象时却失败了,正如您所描述的那样。为了使其正常工作,您需要告诉编组器您有哪些带注释的类:

<bean name="marshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="autodetectAnnotations" value="true"/>
    <property name="annotatedClasses">
        <array>
            <value>com.kipcast.dataModel.drugs.bean.BrandViewList</value>
            <value>com.kipcast.dataModel.drugs.bean.BrandView</value>
        </array>
    </property>
</bean>

我创建了一个示例项目 http://download.skuro.tk/xstream-test.tar.gz我在其中验证设置。

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

Spring RESTful客户端:根标签异常 的相关文章

随机推荐

  • 我可以让 valgrind 告诉我哪个值未初始化吗?

    I ran valgrind一些代码如下 valgrind tool memcheck leak check full track origins yes test 它返回以下错误 24860 Conditional jump or mov
  • 删除 Safari/Chrome 文本输入/文本区域发光

    我想知道当我使用 CSS 单击文本输入 文本区域时是否可以删除默认的蓝色和黄色发光 编辑 11 年后 不要这样做 除非您要提供后备来指示哪个元素处于活动状态 否则 这会损害可访问性 因为它本质上删除了显示文档中哪个元素具有焦点的指示 想象一
  • mysql json vs mongo - 存储空间

    我遇到了一个有趣的情况 虽然不是一个实际的问题 但我不明白为什么会发生这种情况 我们有一个 mongo 数据库 主要由存储在数组中的一些批量数据组成 由于团队中超过 90 的人熟悉 mysql 而只有少数人熟悉 mongo 再加上这不是关键
  • 钻石继承 (C++)

    我知道拥有钻石继承被认为是不好的做法 然而 我有两个案例 我觉得钻石继承非常适合 我想问 在这些情况下你会建议我使用钻石继承 还是有其他设计可以更好 Case 1 我想创建代表系统中不同类型 操作 的类 这些动作按几个参数分类 该操作可以是
  • StackExchange.Redis - LockTake / LockRelease 用法

    我将 Redis 与 StackExchange Redis 一起使用 我有多个线程 它们会在某个时刻访问和编辑同一键的值 因此我需要同步数据的操作 查看可用的函数 我发现有两个函数 TakeLock 和 ReleaseLock 但是 这些
  • Apache mod 重写简单重定向

    我希望对我的网站的请求按如下方式工作 http example com http example com 理想情况下会拉出index php文件 当前默认行为 而不显示index php http example com foo php h
  • 读取和写入长时间运行的 std::process::Child

    我有一个长时间运行的子进程 我需要读取和写入大量数据 我有一个读取器线程和一个写入器线程来操纵child stdout and child stdin分别 extern crate scoped threadpool fn main run
  • 如何通过 VBA 将选择范围扩展到整个段落

    我正在使用此代码将选择范围扩展到Word文档中的整行 现在我想将选择范围扩展到整个段落 Selection Expand wdLine 尝试使用不同的 WdUnit 例如 wdParagraph Selection Expand wdPar
  • PHP - 使图像背景透明并具有容差

    所以我将三个图像设为透明并将它们相互叠加 我按照这篇文章中的示例代码进行操作 用php删除图像背景并保存透明png https stackoverflow com questions 10751227 remove image backgr
  • C++ 带有运行路径的辅助依赖解析

    我有以下问题 我正在尝试使用默认的 gnu 编译器 gcc 7 和可用的链接器版本在 Ubuntu18 上构建软件 现在我们遇到这样的情况 一个可执行文件可以链接一个共享库 该共享库又链接另一个共享库 因此 可执行文件具有次要依赖性 但次要
  • Spring异步方法集成测试失败

    我为异步休息控制器方法创建了一个集成测试 看起来像 Test public void shouldHandleRequestsAsynchronously throws Exception MvcResult mvcResult this
  • PyInstaller 但保持 .py 文件可升级

    我已经成功地将我的 PyQt4 应用程序打包为 Windows 上的 独立 应用程序 它可以工作 然而 这个应用程序可以自我升级 这是通过用通过互联网下载的新版本替换我编写的实际代码 py 文件 来完成的 我怎样才能告诉 PyInstall
  • 如何将参数传递给通过 Assembly.CreateInstance 加载的 C# 插件?

    我现在拥有的 成功加载插件 是这样的 Assembly myDLL Assembly LoadFrom my dll IMyClass myPluginObject myDLL CreateInstance MyCorp IMyClass
  • itertools.cycle().next()?

    嗯 我正在使用itertools cycle next 方法与Python 2 6 6 但现在我更新到3 2我注意到itertools cycle 对象没有方法next 我用它来循环一个字符串spin 的方法Spinner班级 所以如果我们
  • 自定义列表定义 + 自定义内容类型 = 仅显示一个表单字段?

    尝试使用功能来部署自定义字段 内容类型和列表 到目前为止 我有一个引用自定义和内置字段的内容类型 内容类型继承 Item 0x01 现在 我创建引用内容类型和字段 内置和自定义字段 的自定义列表定义 我明确设置ShowInDisplayFo
  • 如何将 Eclipse (helios) 项目移动到不同的工作区?

    首先 Eclipse 不是我的原生 IDE 我对它还算不上熟练 我在工作区中设置了一个项目 该项目实际上位于另一个客户项目的目录中 我并没有真正遵循整个工作区 项目的情况 事实上 现在我什至找不到要打开的 Eclipse 工作区文件它 我想
  • 通过 Gradle 和 Android NDK 强制 CMake 处于详细模式

    我正在使用 Gradle 和 CMake 从命令行编译 Android NDK 项目 以前 我使用 Ant 和ndk build但我正在尝试将项目完全迁移到 Gradle 和 CMake In my build gradle我有以下几行来调
  • 为什么AWS SQS这么慢?

    我一直在测试发送消息和从 SQS 队列接收消息所需的时间 平均需要 800 1200 毫秒 这似乎是一个非常长的时间 这是我的测试代码 如果我做错了什么 请告诉我 var t0 sendMessage hello function send
  • PHP sqlsrv:从函数传递资源

    PHP 5 4 14 SQL Server 2012 SQL 客户端 2012 Windows 2008 R2 我有一个函数 简化版本如下 我调用它来运行 SQL 查询 它工作正常 连接到数据库 运行查询并获取有效资源 问题是返回的资源为空
  • Spring RESTful客户端:根标签异常

    我正在尝试按照此示例使用 RestTemplate 解析 RESTFull 调用的结果http thekspace com home component content article 57 restful clients in sprin