Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedReader+;wildfly 19中的BufferedWriter RESTful web服务_Java_Rest_Wildfly - Fatal编程技术网

Java BufferedReader+;wildfly 19中的BufferedWriter RESTful web服务

Java BufferedReader+;wildfly 19中的BufferedWriter RESTful web服务,java,rest,wildfly,Java,Rest,Wildfly,我有一段代码 @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

我有一段代码

@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写入输出,即

输入


托弗
贾尼
提醒
这个周末别忘了我!
输出

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>
04:55:44190信息[stdout](默认任务-1)
04:55:44191信息[stdout](默认任务-1)Tove
04:55:44191信息[stdout](默认任务1)Jani
04:55:44198信息[stdout](默认任务-1)提醒
04:55:44198信息[stdout](默认任务-1)周末别忘了我!
失踪的

。。。为什么?

当我第二次尝试发送请求时,控制台是空的,我需要重新启动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();
    }
}
@RequestScoped
@路径(“测试”)
@产生(MediaType.APPLICATION_JSON)
@使用(MediaType.APPLICATION_XML)
公共类连接器资源1{
私有静态最终记录器LOG=Logger.getLogger(ConnectorResourceV1.class.toString());
@职位
公共响应测试(InputStream请求)引发IOException{
char[]buff=新字符[16*1024];
int in=0;
int-lastIn=0;
BufferedReader read=新的BufferedReader(新的InputStreamReader(请求));
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(System.out));
而((in=read.read(buff))!=-1){
写(buff,lastIn,in);
if(单位<抛光长度){
如果(in==0){
lastIn=in;
}否则{
lastIn=lastIn+in;
}
}
}
writer.write(“\r\n”);
writer.flush();
返回Response.ok().build();
}
}
注意编写器。编写(“\r\n”)它必须在这里,并且它是一个流终止表达式

另外,因为我使用System.out作为输出,所以不需要关闭它,否则您将无法在控制台会话中看到输出


非常令人不安的体验…

请使用System.lineSeparator()而不是(“\r\n”)。它也可以在其他操作系统上工作。哇,我不知道这也可以工作,我认为(“\r\n”)是http协议特定的。感谢您的见解这是因为
System.out
被包装在一个记录器中,正在寻找一个新的行终止符。因为您使用的是
BufferedWriter
,所以只需使用
writer.newLine()
@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();
    }
}