Это загрузка документа в репозиторий документов из старого веб-приложения. Этот код загрузки находится на уровне обслуживания. Все Java (JDK1.7 +).
Мой код загружается с помощью вызова веб-службы SOAP. Поскольку у веб-сервиса была аутентификация NTLM, и я не мог заставить успешно работать ни один стандартный Apache CXF или другие фреймворки.
Следовательно, я использовал javax. xml. soap .SOAPMessage и другие связанные объекты, а также javax. xml .bind.JAXBContext / javax. xml .bind.Marshaller и связанный с сгенерируйте SOAP XML и org. apache .http.client.methods.HttpPost, чтобы отправить сообщение в веб-сервис. Тем не менее, я использовал сгенерированные классы wsdl2 java.
Ниже приведен код. Проблема в том, что пост-операция занимает около 5 минут для содержимого размером 100 МБ. Кроме того, иногда возникает таймаут для файлов размером 200 МБ или более. В CloseableHttpClient.execute (сообщение, контекст) это займет около 5 минут.
Я хотел бы знать, есть ли способ улучшить время (используя некоторые методы в HttpClient framework).
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();
...