如何正确处理REST XML输入,以便使用StAX

时间:2016-07-13 10:54:14

标签: java xml jaxb jersey stax

如何处理通过REST请求提交的数据,以便我可以使用StAX安全地处理部分数据。

我有一个名为ProcessHustleRequest的类,它由JAXB生成。但是它目前包含一个名为" attachmentBinary" BinaryData太大而无法加载到内存中,所以我希望下载到StAX中以避免将整个文档拉入内存。

我的XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?> <ProcessRequest> <DeliveryDate>2015-12-13</DeliveryDate>  <AttachmentBinary>iVBORw0KGgoAAAANSUhEUgAAAFoA</AttachmentBinary> <AttachmentBinary>iVBORw0KGgoAAAANSUhEUgAAAFoA</AttachmentBinary> </ProcessRequest>

我的服务器端Jersey资源定义如下:

 @POST
 @Path("/hustle")
 @Consumes(MediaType.TEXT_XML)
 @Produces(MediaType.TEXT_XML)
 public Response consumeXMLtoHustle(ProcessHustleRequest processHustle) {

  // I currently pull in attachmentBinary as a String or some other object and //run out of memory.

  try {
   String tempImage = "E:\\temp\\attachment.bin";
   Base64.decodeToFile(processHustle.getAttachmentBinary(), tempImage);
   processTicket.setHasImage(true);
   processTicket.setImageFileName(tempImage);
  } catch (Exception e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }


  return Response.ok().entity(processHustleResponse).build();

 }

我在这里看到了一个可能相关的示例:JAXB - unmarshal OutOfMemory: Java Heap Space

但我不知道如何处理发送给我的XML文件。如果可以,可以推测,那么我应该只删除对attachmentBinary的JAXB引用,只使用STaX引入该元素。

我怀疑我也可以根据这个答案实施一些事情How to avoid OutOfMemoryError when uploading a large file using Jersey client

 @POST
    @Path("/hustle/{attachmentName}")
    @Consumes(MediaType.APPLICATION_OCTET_STREAM)
    public void uploadAttachment(@PathParam("attachmentName") String attachmentName, InputStream attachmentInputStream) {
        // do something with the input stream
    }

0 个答案:

没有答案