MSF4J POST 方法接收部分数据
MSF4J POST method receiving partial data
我是 MSF4J 的新手,我需要编写一个 REST API 通过 POST 接受大量 XML 数据。我在用
request.getMessegeBody()
获取数据的方法。我发现它现在已被弃用,但我找不到它的更新版本,所以我还是决定使用它。
问题是,当我第一次向微服务发送数据时,它并没有获得全部数据。除第一个请求外,所有后续请求都将获得完整的消息正文。
当我尝试通过 ESB 传递请求时,ESB 接收整个请求体,但当它到达端点时,它将被处理运行。
我也尝试过从不同的 rest 客户端发送请求,但第一次总是收到不完整的消息正文
@POST
@Consumes({ "application/xml", "application/json", "text/xml" })
@Path("test/")
public Response getReqNotification(@Context Request request) throws Exception {
Response.ResponseBuilder respBuilder =
Response.status(Response.Status.OK).entity(request);
ByteBuf b = request.getMessageBody();
byte[] bb = new byte[b.readableBytes()];
b.duplicate().readBytes(bb);
System.out.println(new String(bb));
return respBuilder.build();
}
我希望它在我每次发送请求时打印完整的消息(大约 2000 字节长),但是当我第一次 运行 微服务时我只得到大约 800 字节。
希望我能在这里得到帮助。我在其他地方试过,但 wso2 没有太多文档 (⌣_⌣”)
我仍然不太明白我做错了什么,但是在 this link 的帮助下,我设法想出了以下代码并且它工作正常。
主要的问题是我现在使用 request.getMessageContentStream()
而不是 depricated request.getMessageBody()
@Consumes({ "application/xml", "application/json", "text/xml" })
@Path("test/")
public Response getReqNotification(@Context Request request) throws Exception {
Response.ResponseBuilder respBuilder =
Response.status(Response.Status.OK).entity(request);
String data = "";
BufferedInputStream bis = new BufferedInputStream(request.getMessageContentStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
int d;
while ((d = bis.read()) != -1) {
bos.write(d);
}
data = bos.toString();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
bos.close();
} catch (IOException e) {
}
}
System.out.println(data);
//////do stuff
return respBuilder.build();
}
我是 MSF4J 的新手,我需要编写一个 REST API 通过 POST 接受大量 XML 数据。我在用
request.getMessegeBody()
获取数据的方法。我发现它现在已被弃用,但我找不到它的更新版本,所以我还是决定使用它。
问题是,当我第一次向微服务发送数据时,它并没有获得全部数据。除第一个请求外,所有后续请求都将获得完整的消息正文。
当我尝试通过 ESB 传递请求时,ESB 接收整个请求体,但当它到达端点时,它将被处理运行。
我也尝试过从不同的 rest 客户端发送请求,但第一次总是收到不完整的消息正文
@POST
@Consumes({ "application/xml", "application/json", "text/xml" })
@Path("test/")
public Response getReqNotification(@Context Request request) throws Exception {
Response.ResponseBuilder respBuilder =
Response.status(Response.Status.OK).entity(request);
ByteBuf b = request.getMessageBody();
byte[] bb = new byte[b.readableBytes()];
b.duplicate().readBytes(bb);
System.out.println(new String(bb));
return respBuilder.build();
}
我希望它在我每次发送请求时打印完整的消息(大约 2000 字节长),但是当我第一次 运行 微服务时我只得到大约 800 字节。
希望我能在这里得到帮助。我在其他地方试过,但 wso2 没有太多文档 (⌣_⌣”)
我仍然不太明白我做错了什么,但是在 this link 的帮助下,我设法想出了以下代码并且它工作正常。
主要的问题是我现在使用 request.getMessageContentStream()
而不是 depricated request.getMessageBody()
@Consumes({ "application/xml", "application/json", "text/xml" })
@Path("test/")
public Response getReqNotification(@Context Request request) throws Exception {
Response.ResponseBuilder respBuilder =
Response.status(Response.Status.OK).entity(request);
String data = "";
BufferedInputStream bis = new BufferedInputStream(request.getMessageContentStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
int d;
while ((d = bis.read()) != -1) {
bos.write(d);
}
data = bos.toString();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
bos.close();
} catch (IOException e) {
}
}
System.out.println(data);
//////do stuff
return respBuilder.build();
}