javax.xml.soap.MessageFactory.createMessage调用对于大型内容花费的时间太长

javax.xml.soap.MessageFactory.createMessage调用对于大型内容花费的时间太长,soap,javax.xml,Soap,Javax.xml,http响应内容是一条包含100mb内容的soap消息 messageFactory.createMessage(null,responseinputstream) 需要3到4分钟,而且 responseSoapMessage.getSOAPBody() 还需要4分钟或更长时间。 之后,由于我在WildFly应用服务器中,事务超时 MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_P

http响应内容是一条包含100mb内容的soap消息

messageFactory.createMessage(null,responseinputstream) 需要3到4分钟,而且 responseSoapMessage.getSOAPBody() 还需要4分钟或更长时间。 之后,由于我在WildFly应用服务器中,事务超时

MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
...
HttpEntity responseHttpEntity = httpResponse.getEntity();
...
InputStream responseContentStream = responseHttpEntity.getContent();
SOAPMessage responseSoapMessage = messageFactory.createMessage(null, responseContentStream);
SOAPBody responseSoapBody = responseSoapMessage.getSOAPBody();

在通过MessageFactory从InputStream创建SOAPMessage时,我想知道为什么需要这么长时间

可能是因为罐子的问题吗? 我有两个jar:axis-1.4.jar和saaj-impl-1.3.jar

然而,在调试时,我发现使用的类是来自saaj-impl-1.3.jar的SOAPMessageFactory1_2Impl

不过,我无法解释为什么跨越这两行代码需要5分钟以上

这是响应InputStream中的SOAP XML

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ReceiveDocumentResponse xmlns="https://NAMESPACEURL">
         <ReceiveDocumentResult>
            <base64Binary>HERE IS THE JPG IMAGE CONTENT OF SIZE 100 MB OR MORE</base64Binary>
         </ReceiveDocumentResult>
      </ReceiveDocumentResponse>
   </soap:Body>
</soap:Envelope>

以下是大小为100 MB或更大的JPG图像内容
注意对于小于30 MBs的内容,此方法调用work Requisity good(quick)


关于故障排除的任何提示,或者关于解析内容的替代方法的任何提示,都非常感谢

我用下面的内容替换了上面的逻辑。100 MB的内容确实需要一分钟左右的时间,但它的工作方式始终如一

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
builderFactory.setNamespaceAware(true);
DocumentBuilder domParser = null;
                    
domParser = builderFactory.newDocumentBuilder();
domDocument =  domParser.parse(responseContentStream);
NodeList elementList = domDocument.getElementsByTagName("base64Binary");
Node element = elementList.item(0);
String base64String = element.getTextContent();
byte[]  rawData= Base64.getDecoder().decode(base64String);
document.setBData(rawData);

不管是什么…

我用下面的逻辑替换了上面的逻辑。100 MB的内容确实需要一分钟左右的时间,但它的工作方式始终如一

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
builderFactory.setNamespaceAware(true);
DocumentBuilder domParser = null;
                    
domParser = builderFactory.newDocumentBuilder();
domDocument =  domParser.parse(responseContentStream);
NodeList elementList = domDocument.getElementsByTagName("base64Binary");
Node element = elementList.item(0);
String base64String = element.getTextContent();
byte[]  rawData= Base64.getDecoder().decode(base64String);
document.setBData(rawData);
不管是什么