簡體   English   中英

Wildfly 19 中的 BufferedReader + BufferedWriter RESTful Web 服務

[英]BufferedReader + BufferedWriter RESTful web service in wildfly 19

我有一段代碼

@RequestScoped
@Path("test")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_XML)
public class Test {
    private static final Logger LOG = Logger.getLogger(Test.class.toString());

    @POST
    public Response createRequest(InputStream request) throws IOException {
        char[] buff = new char[1024];
        int in = 0;
        BufferedReader reader = new BufferedReader(new InputStreamReader(request));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out, "UTF-8"));
        try {
            while ((in = reader.read(buff)) != -1) {
                //writer.write(buff);
                writer.write(buff, 0, in);

            }
        } finally {
            writer.flush();
            writer.close();
            reader.close();
        }
        return Response.ok().build();
    }
}

問題是這個服務寫入輸出不完整的xml,即

輸入

<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
</note>

輸出

04:55:44,190 INFO  [stdout] (default task-1) <note>
04:55:44,191 INFO  [stdout] (default task-1) <to>Tove</to>
04:55:44,191 INFO  [stdout] (default task-1) <from>Jani</from>
04:55:44,198 INFO  [stdout] (default task-1) <heading>Reminder</heading>
04:55:44,198 INFO  [stdout] (default task-1) <body>Don't forget me this weekend!</body>

一個失蹤

</note>

... 為什么?

當我第二次嘗試發送請求時,控制台為空,我需要重新啟動 Wildfly 才能將不完整的 xml 輸入輸出......為什么?

筆記:

我沒有錯誤到控制台

好吧,經過長時間的失敗,我找到了它不工作的原因......這有點令人不安......

所以......工作示例

@RequestScoped
@Path("test")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_XML)
public class ConnectorResourceV1 {
    private static final Logger LOG = Logger.getLogger(ConnectorResourceV1.class.toString());

    @POST
    public Response test(InputStream request) throws IOException {
        char[] buff = new char[16 * 1024];
        int in = 0;
        int lastIn = 0;
        BufferedReader read = new BufferedReader(new InputStreamReader(request));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
    while ((in = read.read(buff)) != -1) {
        writer.write(buff, lastIn, in);
        if (in < buff.length) {
            if (in == 0) {
                lastIn = in;
            } else {
                lastIn = lastIn + in;
            }
        }
    }
        writer.write("\r\n");
        writer.flush();
        return Response.ok().build();
    }
}

注意writer.write("\\r\\n"); 它必須在這里,而且它似乎是一個流終止表達式??

另外,因為我使用 System.out 作為我的輸出,所以我不需要關閉它,否則您將不會在控制台會話中看到輸出。

一個非常令人不安的經歷...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM