这是从旧的Web应用程序上载到文档存储库中的文档。此上载代码在服务层中。所有Java(JDK1.7 +)。
我的代码是通过调用SOAP Web服务上载的。 由于Web服务具有NTLM身份验证,因此我无法获得任何标准的Apache CXF或其他框架来成功工作。
因此,我使用javax.xml.soap.SOAPMessage和其他相关对象,并使用javax.xml.bind.JAXBContext / javax.xml.bind.Marshaller和与之相关的SOAP XML和org.apache.http。 client.methods.HttpPost将消息发布到Web服务。 尽管如此,我还是使用wsdl2java生成的类。
以下是代码。 问题是,对于大小为100 MB的内容,后期操作将花费近5分钟。此外,对于大小为200MB或更大的文件,有时似乎会发生超时。在CloseableHttpClient.execute(发布,上下文)处,大约需要5分钟。
我想知道是否有任何方法可以改善时间(通过使用HttpClient框架中的某些技术)。
httpClientContextInsert = HttpClientContext.create();
httpClient4Insert = HttpClients.createDefault();
ByteArrayEntity soapMessageAsByteArrayEntity4Document = null;
CreateDocument createDocument = new CreateDocument();
createDocument.setFileExtension(fileExtension);
createDocument.setContent(documentContentBase64s);
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPBody soapBody = soapMessage.getSOAPBody();
// Using JAXB API, marshal the Soap Object
JAXBContext jaxbContext = JAXBContext.newInstance(CreateDocument.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.newDocument();
marshaller.marshal(createDocument, document);
// Marshal the object into the SOAPBody
soapBody.addDocument(document);
// Convert the SOAPMessage into a byte array entity
ByteArrayOutputStream out = new ByteArrayOutputStream();
soapMessage.writeTo(out);
soapMessageAsByteArrayEntity4Document = new ByteArrayEntity(out.toByteArray(), ContentType.APPLICATION_SOAP_XML);
...
HttpPost httpPost4Insert = new HttpPost(serviceAccessURLString);
httpPost4Insert.setEntity(soapMessageAsByteArrayEntity4Document);
httpResponse4Insert = httpClient4Insert.execute(httpPost4Insert, httpClientContextInsert);
StatusLine statusLine = httpResponse4Insert.getStatusLine();
HttpEntity responseHttpEntity = httpResponse4Insert.getEntity();
...