簡體   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