Java 如何在RESTWeb服务中接收大型XML文件

Java 如何在RESTWeb服务中接收大型XML文件,java,web-services,rest,memory,load,Java,Web Services,Rest,Memory,Load,如何重新设计高负载REST web服务 我有一个现有的基于Java的RESTWeb服务,它以字符串形式接收XML文件。有多个客户端正在向此服务发送XML文件。事实证明,作为字符串发送到此服务的大型XML文件(>100MB)会导致web服务减速、冻结和崩溃(OutOfMemory) 如何修改web服务以接收和处理大型XML数据,而不影响现有客户机 这就是现有web服务签名的含义: @POST @Path("/acceptMessage") public String acceptMessage(S

如何重新设计高负载REST web服务

我有一个现有的基于Java的RESTWeb服务,它以字符串形式接收XML文件。有多个客户端正在向此服务发送XML文件。事实证明,作为字符串发送到此服务的大型XML文件(>100MB)会导致web服务减速、冻结和崩溃(OutOfMemory)

如何修改web服务以接收和处理大型XML数据,而不影响现有客户机

这就是现有web服务签名的含义:

@POST
@Path("/acceptMessage")
public String acceptMessage(String request) throws Exception;
“字符串请求”导致加载/性能问题。我对web服务签名所做的任何更改都不会影响现有的web服务客户端


我的选项是什么?

字符串请求
参数更改为
读卡器请求
。根据JAX-RS规范的第4.2.4节,它也可以是
文件请求
。还有许多其他有效类型,您可能会觉得有用,也可能不会觉得有用:

  • javax.activation.DataSource
    所有媒体类型(/)
  • javax.xml.transform.Source
    xml类型(text/xml、application/xml和application/*+xml)
  • javax.xml.bind.JAXBElement
    和应用程序提供的JAXB类xml媒体类型(text/xml、application/xml和application/*+xml)

字符串请求
参数更改为
读卡器请求
。根据JAX-RS规范的第4.2.4节,它也可以是
文件请求
。还有许多其他有效类型,您可能会觉得有用,也可能不会觉得有用:

  • javax.activation.DataSource
    所有媒体类型(/)
  • javax.xml.transform.Source
    xml类型(text/xml、application/xml和application/*+xml)
  • javax.xml.bind.JAXBElement
    和应用程序提供的JAXB类xml媒体类型(text/xml、application/xml和application/*+xml)

您使用的是哪个框架?Apache CXF与Spring Web服务,运行在Tomcat上?您使用的是哪个框架?Apache CXF与Spring Web服务,运行在Tomcat上阅读器是一个不错的选择,也是一个理想的解决方案。当然,现在我的下游POJO服务也使用字符串,需要更改。Reader是一个很好的选择,也是一个理想的解决方案。当然,现在也使用字符串的下游POJO服务需要更改。