繁体   English   中英

CXF / JAXB在编组原始长整型返回值时失败

[英]CXF/JAXB fails at marshalling primitive long return value

我有一个简单的CXF方法,该方法返回很长的时间

  @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:由于缺少@XmlRootElement批注,因此无法将类型“ java.lang.Long”作为元素编组

CXF为何不能长时间元帅? 谢谢你的帮助

编辑

我实际上是在编写现有服务的模型实现(出于测试目的)。 我无法控制现有服务的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结构,将其重新运行为文本并添加带返回类型内容的纯文本/文本注释生产。

@GET
@Produces("text/plain")
@Path("/count/{foo}/{bar}")
long count(@PathParam("foo") String foo, @PathParam("bar") String bar)

如果您使用的是cxf客户端,则可以阅读以下内容

Response response = client.get();
response.readEntity(Long.class);

EDIT

删除jaxrs:providers,默认情况下cxf内部处理jaxb转换

<jaxrs:server id="myServer" address="/">
    <jaxrs:serviceBeans>
      <ref bean="myServiceImpl" />
    </jaxrs:serviceBeans>
</jaxrs:server>

这是我测试的以下代码,但是,当我添加提供程序时,它给出了错误。

@Path("/add")
    @Produces("application/xml")
    @GET
    public Long add(@QueryParam("v1")int v1, @QueryParam("v2")int v2){

        long result =v1+v2;
        return result;

    }


    @Path("/subtract")
    @Produces("application/xml")
    @GET
    public Output subtract(@QueryParam("v1")int v1, @QueryParam("v2")int v2){

        Output out = new Output();
        out.setResult(v1-v2);
        return out;

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM