Hallo alle zusammen, ich hoffe ihr könnt mir etwas weiterhelfen.
Ich verwende momentan einen AXIS2 Webservice, welcher in der Lage sein soll, Screenshots und Videos (also Dateien welche wohl so an die 100+ MB haben werden) zu übermitteln. In der AXIS2 Dokumentation steht drinnen, dass dies mithilfe des javax.activation.DataHandler möglich ist (direkt als File übertragen funktioniert nicht, da müsste ich das Ganze erst encodieren damit es mit SOAP übertragen werden kann).
Jetzt ist meine Webservice-Funktion verfügbar und funktioniert auch für kleinere Bilder, aber: Versuche ich nun größere Dateien (>200 MB) zu übertragen macht mir anscheinend Axis2 mit einem OutOfMemory: Java Heap Space schlapp. MTOM Übertragung, Attachements sowie Caching sind aktiviert (sowohl im Client als auch im Server), jedoch soll es lt. Axis2 Seite möglich sein bis zu 1 GB Daten zu Übertragen (darüber haben sie nicht getestet). Ich hab auch schon mittels -Xmx1024M den Speicher am Server höher eingestellt, hat auch nicht wirklich Früchte getragen. Der Client erreicht zwar die Logger-Marke, dass er jetzt auf den Webservice schreibt aber es wird niemals der Logger in der Funktion ausgelöst weil es vorher zu der Exception kommt.
Gibt es nun irgendeine Möglichkeit, dass ich Axis2 sagen kann, dass es bitte die Datei in kleinen Chunks übertragen soll? Mein Client sowie Server sehen wie folgt aus:
Client:
Server:
Dank euch für eure Mühen.
Lg
Larius
Ich verwende momentan einen AXIS2 Webservice, welcher in der Lage sein soll, Screenshots und Videos (also Dateien welche wohl so an die 100+ MB haben werden) zu übermitteln. In der AXIS2 Dokumentation steht drinnen, dass dies mithilfe des javax.activation.DataHandler möglich ist (direkt als File übertragen funktioniert nicht, da müsste ich das Ganze erst encodieren damit es mit SOAP übertragen werden kann).
Jetzt ist meine Webservice-Funktion verfügbar und funktioniert auch für kleinere Bilder, aber: Versuche ich nun größere Dateien (>200 MB) zu übertragen macht mir anscheinend Axis2 mit einem OutOfMemory: Java Heap Space schlapp. MTOM Übertragung, Attachements sowie Caching sind aktiviert (sowohl im Client als auch im Server), jedoch soll es lt. Axis2 Seite möglich sein bis zu 1 GB Daten zu Übertragen (darüber haben sie nicht getestet). Ich hab auch schon mittels -Xmx1024M den Speicher am Server höher eingestellt, hat auch nicht wirklich Früchte getragen. Der Client erreicht zwar die Logger-Marke, dass er jetzt auf den Webservice schreibt aber es wird niemals der Logger in der Funktion ausgelöst weil es vorher zu der Exception kommt.
Gibt es nun irgendeine Möglichkeit, dass ich Axis2 sagen kann, dass es bitte die Datei in kleinen Chunks übertragen soll? Mein Client sowie Server sehen wie folgt aus:
Client:
Java:
TestSaveResult result = new TestSaveResult();
result.setState("Failed");
result.setDetailMessage("Exception in WebserviceConnector");
result.setMessage("Fehler bei der Berechnung in Foo");
result.setScreenshot("P:\\LoremIpsum.txt");
TestActionLogger.logDebug("Startzeit Screenshot in DataHandler einlesen");
DataHandler dataHandler = new DataHandler(new FileDataSource(new File(result.getScreenshot())));
TestActionLogger.logDebug("Endzeit Screenshot in DataHandler einlesen");
result.setScreenshotData(dataHandler);
result.setScreenshotEncoding("Base64");
result.setScreenshotExtension("txt");
result.setTaConnectorID(response.get_return());
result.setVideo("");
result.setVideoData("");
result.setVideoEncoding("");
result.setVideoExtension("");
TestActionLogger.logDebug("Start zum Übertragen der Nachricht via Webservice");
stub.testSaveResult(result);
Server:
Java:
public void testSaveResult(String taConnectorID, String state, String message, String detailMessage, String screenshot, String screenshotEncoding, String screenshotExtension, DataHandler screenshotData, String video, String videoEncoding, String videoExtension, String videoData)
{
TestActionLogger.logDebug("Aufruf der testSaveResult Methode am Webservice");
controller.saveResult(taConnectorID, state, message, detailMessage, screenshot, screenshotEncoding, screenshotExtension, screenshotData, video, videoEncoding, videoExtension, videoData);
TestActionLogger.logDebug("Beendigung der testSaveResult Methode am Webservice");
}
public void saveResult(String state, String message, String detailMessage, String screenshot, String screenshotEncoding, String screenshotExtension, DataHandler screenshotData, String video, String videoEncoding, String videoExtension, String videoData)
{
this.saveResult(state, message, detailMessage, screenshot, screenshotEncoding, screenshotExtension,"", video, videoEncoding, videoExtension, videoData);
try {
String tmpFileName = KLTASOAPListener.rootPath + "TestResultResources/" + this.testCase.getID() + "/" + this.currentTestItem.getID() + "." + screenshotExtension;
final File file = new File(tmpFileName);
file.getParentFile().mkdirs();
TestActionLogger.logDebug("Filename fuer Screenshot: " + tmpFileName);
OutputStream outStream = new FileOutputStream(file);
DataHandler dataHandler = screenshotData;
TestActionLogger.logDebug("Startzeit Screenshot auf HDD schreiben");
dataHandler.writeTo(outStream);
outStream.flush();
outStream.close();
TestActionLogger.logDebug("Endzeit Screenshot auf HDD schreiben");
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Dank euch für eure Mühen.
Lg
Larius