2017-06-01 43 views
0

人們,我發現什麼似乎是一個問題/(錯誤?)MSF4J因爲在URI中包含一個@MatrixParam註釋變量導致受影響的(微)服務'掛'無限期地,或者如果通過瀏覽器訪問,即使正確,爲路徑/端點提供「404未找到」消息。問題與MSF4J和@MatrixParam

這裏是一個代碼片段,它說明了這個問題 - 它以通常的方式使用microservicesrunner()編譯ok(eclipse/maven)並且沒有錯誤地部署。

package org.test.service; 

import javax.ws.rs.GET; 
import javax.ws.rs.MatrixParam; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Response; 

@Path("books") 

public class MPTest { // MatrixParam Test 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    @Path("/query") 

    // method to respond to 'GET' requests 
    public Response getListOfBooks(@MatrixParam("Author") String author) { 

    // do something in here to get book data from DB and sort by titles 
    List<String> titles = .......; 

    return Response.status(200) .entity("List of Books by " +author+ "ordered by title " + titles).build(); 
    } 
} 

有了這個代碼片段,訪問URL「(宿主:8080)/書籍/查詢;作者=米老鼠」應由作者造成圖書列表從DB中檢索到的(I省略了實際的代碼爲了清晰起見,因爲它與這篇文章無關)。

但是,它沒有到達那裏,所以代碼沒有執行。據我可以告訴調試器,沒有@MatricParam值被檢索 - 它保持空,直到過程超時。諸如curl和wget之類的東西只是在它們超時之前掛起,而從瀏覽器中,我能得到的最好的結果是URI沒有找到404的錯誤,即使它是有效的。

但是,如果我將@MatrixParam替換爲@PathParam,它可以完美工作,並且可以獲取以其整體方式檢索的URL字符串。我得到的URI與預期的一樣 - 沒有奇怪的十六進制字符,沒有拼寫錯誤等等。輸入的URI是你回來的東西。所以,那裏沒有問題。

跨平臺(Linux和Windoze的三個版本)的行爲也是一致的,所以它與操作系統本身沒有任何關係。同樣,我得到與多個客戶端和工具相同的行爲,所以它也不是問題。

因此,它似乎是MSF4J框架/域內的問題,我可以在這裏使用一些支持/幫助/建議,因爲我已經達到了撕掉我的頭髮的目的.....任何想法,鄉親?

我能找到一個類似的問題,唯一提及未經封閉的答覆爲「題外話」(見Rest API Matrix param annotation),所以我覺得這需要重新開放,因爲它似乎是一個真正的問題....

的問候,並感謝您的幫助, 裏克

回答

0

@MatrixParam沒有與目前MSF4J支持。你可以創建一個GitHub問題。所以我們可以在未來的版本中實現這種支持。

+0

ThanksThysitha - 你的回答非常感謝,它當然解釋了奇怪的行爲......我會很快提出一個問題。同時,我將不得不解決它。 Rick – rickturner646