Spring RestTemplate - 没有为响应类型[..]和内容类型[application / xml]找到合适的HttpMessageConverter

时间:2012-01-10 11:24:23

标签: rest marshalling resttemplate spring-3 jaxb2

我在使用RestTemplate访问REST服务时遇到问题。我已经设法使用MarshallingConverter来访问另一个服务,一切正常。我已经复制了这个功能,并从我收到的XSD架构中生成了Model类。但是我得到一个例外,没有找到合适的转换器。这是我的配置(如果重要的话,我将使用Spring 3.0.6与Vaadin连接):

<bean id="marshallingConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
    <property name="marshaller" ref="jaxbMarshaller" />
    <property name="unmarshaller" ref="jaxbMarshaller" />
</bean>

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            ... here are my model classes ...
        </list>
    </property>
</bean>

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <ref bean="marshallingConverter" />
        </list>
    </property>
</bean>

RestTemplate在我的服务客户端类实现中自动装配。我在这里错过了什么?我已经检查了响应并且内容类型设置为application / xml并且模型类是自动生成的,因此配置应该是正确的。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

所以我做了这个工作。问题的一部分是,生成的类缺少XmlRootElement注释。更多关于它here。所以我已经将XJC注释添加到XSD架构中并使用以下命令再次生成类:

xjc -extension /path/to/schema

之后一切都工作了(或者至少我没有得到处理XML的任何异常),但是根元素内部的元素没有被解组,我只从解析器获得了XMLElement implpementation。问题是(这是我的项目特有的),元素定义使用xs:anyType作为元素类型,无法解析。在我将其改为正确的元素类型后,一切都像魅力一样。