Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 SchemaValidation在MTOM文件上载中带来ClassCastException和OutOfMemoryError_Java_Web Services_Jax Ws_Java Metro Framework_Mtom - Fatal编程技术网

Java SchemaValidation在MTOM文件上载中带来ClassCastException和OutOfMemoryError

Java SchemaValidation在MTOM文件上载中带来ClassCastException和OutOfMemoryError,java,web-services,jax-ws,java-metro-framework,mtom,Java,Web Services,Jax Ws,Java Metro Framework,Mtom,我创建了文件上载Web服务: @SchemaValidation @WebService(endpointInterface = "com.ws.server.ExchangeEndpoint") public class ExchangeEndpoint { @Override public String uploadDocument(long residentId, String fileName, String mimeType, DataHandler data) { try

我创建了文件上载Web服务:

@SchemaValidation
@WebService(endpointInterface = "com.ws.server.ExchangeEndpoint")
public class ExchangeEndpoint {

@Override
public String uploadDocument(long residentId, String fileName, String mimeType, DataHandler data) {

    try {
        StreamingDataHandler dh = (StreamingDataHandler) data;  //it cast exception
以下是界面:

@WebService
@StreamingAttachment(parseEagerly = true, memoryThreshold = 4194304L)
@MTOM
public interface ExchangeEndpoint {
    @WebMethod String uploadDocument(@XmlElement(name = "residentId",required = true) long residentId,
                                 @XmlElement(name = "fileName",required = true) String fileName,
                                 @XmlElement(name = "mimeType",required = true) String mimeType,
                                 @XmlElement(name = "data",required = true) @XmlMimeType("application/octet-stream") DataHandler data);
并且它会引发ClassCastException异常:

java.lang.ClassCastException: javax.activation.DataHandler cannot be cast to com.sun.xml.ws.developer.StreamingDataHandler
但是当我删除@SchemaValidation注释时,一切都很好

那么为什么@SchemaValidation会破坏DataHandler对象呢

当我尝试上载大于300mb的大文件时,我得到了OutOfMemoryError:

java.lang.OutOfMemoryError: Java heap space  at org.jvnet.staxex.ByteArrayOutputStreamEx.readFrom(ByteArrayOutputStreamEx.java:75) at org.jvnet.staxex.Base64Data.get(Base64Data.java:331)

而且没有@SchemaValidation,所有作品都很好这是一个众所周知的问题。 在没有模式验证的情况下,您的文件可以作为二进制附件一次传输一个数据块,这样就不会出现内存问题。 如果添加模式验证,则该文件必须编码为base64并内联到xml消息中;当文件太大时,这会导致内存问题。 我知道的所有jaxws实现都是这样工作的

如果将数字签名添加到Web服务中,则出于相同的原因,您会遇到完全相同的问题


不幸的是,我没有解决这个问题的方法。

尝试增加分配给java机器的内存,看看是否能够验证更大的附件。apache cxf 3.2.2也存在这个令人困惑的问题。我很惊讶它的票数如此之少。谢谢分享!