Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 如何判断文件上传/下载JAX-WS web服务是流式还是缓冲式?_Java_Web Services_Jax Ws_Filestream_Ibm Was - Fatal编程技术网

Java 如何判断文件上传/下载JAX-WS web服务是流式还是缓冲式?

Java 如何判断文件上传/下载JAX-WS web服务是流式还是缓冲式?,java,web-services,jax-ws,filestream,ibm-was,Java,Web Services,Jax Ws,Filestream,Ibm Was,在WAS 8.0上使用JAX-WS web服务上传/下载大于100MB的大文件。对于这样大的文件,文件流作为一种选项,我遇到了StreamingDataHandler和StreamingAttachmentFeature,这两种功能都只能通过JAX-WS的Metro GlassFish实现或WebLogic实现使用 使用WAS8.0时,我排除了它们作为选项的可能性,并实现了一个web服务,该服务只包含DataHandler和MTOM注释,用于上传和下载文件。在客户端,我启用了MTOMFeatur

在WAS 8.0上使用JAX-WS web服务上传/下载大于100MB的大文件。对于这样大的文件,文件流作为一种选项,我遇到了StreamingDataHandler和StreamingAttachmentFeature,这两种功能都只能通过JAX-WS的Metro GlassFish实现或WebLogic实现使用

使用WAS8.0时,我排除了它们作为选项的可能性,并实现了一个web服务,该服务只包含DataHandler和MTOM注释,用于上传和下载文件。在客户端,我启用了MTOMFeature并设置了JAXWSProperties.HTTP_client_STREAMING_CHUNK_SIZE(“com.sun.xml.ws.transport.HTTP.client.STREAMING.CHUNK.SIZE”)的值

我的问题有两个方面: 1.仅使用上述类/注释就可以实现文件流传输吗?
2.如果是,我如何100%确定文件确实正在传输

我有同样的要求,即在不增加内存的情况下处理有效负载中的大文件。我不得不将JVM堆大小增加到2G,以获得非基于流的解决方案来处理并发文件上传。在实现基于流的解决方案之前,我一直使用WebLogic10.3.5,它内置了JAX-WSRI 2.1.5

  • MTOM注释优化了线上传输,即:。, 发送/接收二进制数据(作为HTTP多部分消息二进制) 附件)而不是base64编码字符串。为了使 您需要在Web服务中处理基于流的负载 除了@MTOM之外,还使用下面的注释

    @StreamingAttachment(parsely=true,memoryThreshold=40000L)

  • 此注释来自SUN JAX-WS RI包: 导入com.sun.xml.ws.developer.StreamingAttachment

    另外,使用DataHandler类型的JAXB数据字段以及以下注释:

    @XmlMimeType("application/octet-stream")
    
    受保护的数据处理器数据

  • 是的,您可以通过监视JVM来判断流是否工作 堆大小(我注意到它跳到700MB,使用了100MB的堆内存 由于有效载荷的基于字符串的处理而产生的附件,即 非流模式)。或者您可以记录数据的类名 字段,它将类似于“StreamingDataHandler”(其中 扩展自DataHandler)。如果您使用Eclipse或类似的调试器 然后在那里(端点类内部)放置一个断点并查看 对于接收到的有效载荷,您应该注意到“数据”指的是 流处理程序是一个具体的类

    log.debug("Data handler class : " + stream.getClass().getName());
    

  • 请尝试格式化你的问题,很难理解到底发生了什么