【发布时间】:2014-07-23 08:31:41
【问题描述】:
我有一个简单的 CXF 方法,它返回一个 long
@GET
@Path("/count/{foo}/{bar}")
long count(@PathParam("foo") String foo, @PathParam("bar") String bar)
我有一个带有 JAXB 设置的 CXF 服务器
<jaxrs:server id="myServer" address="/">
<jaxrs:providers>
<bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
<property name="singleJaxbContext" value="true" />
<property name="skipJaxbChecks" value="true" />
<property name="validateOutput" value="false" />
</bean>
</jaxrs:providers>
<jaxrs:serviceBeans>
<ref bean="myServiceImpl" />
</jaxrs:serviceBeans>
</jaxrs:server>
但是当我调用此方法时,服务器无法编组结果:
原因:com.sun.istack.SAXException2:无法编组类型 “java.lang.Long”作为一个元素,因为它缺少一个 @XmlRootElement 注解
为什么 CXF 不能编组 long ? 感谢您的帮助
编辑
我实际上正在编写现有服务的模型实现(用于测试目的)。 我无法控制现有服务的 API。 它当前的实现返回类似
Response-Code: 200
Encoding: ISO-8859-1
Content-Type: application/xml
Headers: {connection=[close], Content-Length=[3], content-type=[application/xml], Date=[Wed, 23 Jul 2014 08:00:31 GMT]}
Payload: 121
我同意这不是真正的 XML。 但目前的客户也没有抱怨,也没有任何魔法。
【问题讨论】:
-
您对输出的期望是什么?您的回复内容类型是什么?
-
问题是因为你试图从一个长的,没有任何结构的xml,所以如果你愿意,用长的内部制作一个对象,并为jaxb添加必要的注释
-
请看我上面的编辑
-
好吧,如果您在 cxf 文档中看到他们总是使用 Reponse 或一些 jaxb 对象作为答案,就像我说您正在尝试将 Long 转换为没有任何结构的 xml,jaxb 不知道 wwitch element root put在 xml 输出中,响应必须是
2 ?2 ?那为什么不工作。