Fehlerbehebung

Dieser Abschnitt enthält Informationen zur Fehlerbehebung für das Oracle Cloud Infrastructure-SDK für Java.

Dieser Abschnitt enthält Informationen zur Fehlerbehebung für das Oracle Cloud Infrastructure-SDK für Java.

Programm hängt für eine unbestimmte Zeit

Wenn eine Anforderung an den Server eine unbestimmte Zeit lang hängt, kann dies darauf zurückzuführen sein, dass die Verbindung nicht aus dem Verbindungspool freigegeben wurde.

Das SDK für Java unterstützt jetzt den Apache-Connector zum Senden von Anforderungen und Verwalten von Verbindungen zum Service. Der Apache-Connector unterstützt das Verbindungspooling. Wenn ein Stream nicht geschlossen wird, werden die Verbindungen nicht aus dem Verbindungspool freigegeben, was zu einer unbegrenzten Wartezeit führen kann.
Das SDK schließt den Stream automatisch, um die Verbindung aus dem Verbindungspool freizugeben, jedoch nur, wenn der Stream vollständig gelesen wurde.
Um ein Hängen des Programms zu vermeiden, müssen Sie alle von der Antwort zurückgegebenen Streams schließen, um die Verbindungen aus dem Verbindungspool freizugeben und unbestimmte Wartezeiten zu vermeiden. Beispiel:
GetObjectResponse getObjectResponse = client.getObject(getObjectRequest);
getObjectResponse.getInputStream().close(); // Close the stream OR use try-with-resources
try (final InputStream fileStream = getResponse.getInputStream()) {
} // try-with-resources automatically closes fileStream

Sie können auch zum Jersey-Standard-Connector HttpUrlConnector zurück wechseln. Weitere Informationen finden Sie unter Jersey-Standardwert HttpUrlConnectorProvider verwenden.

Server trennt die Verbindung zur Apache-Client-Library ohne Antwort

In manchen Fällen, in der Regel bei hoher Belastung, empfängt der Server eine Anforderung, verarbeitet sie jedoch nicht. Dies kann dazu führen, dass der Server die Verbindung zum Client löscht, ohne eine Antwort auszugeben. Der Apache-HttpClient löst eine NoHttpResponseException aus, wenn eine solche Bedingung auftritt. In diesen Fällen wiederholt der zugrunde liegende Apache-HttpClient die Anforderungen an den Server und gibt Logs auf INFO-Ebene über Wiederholungen an den Server aus. Wenn die Wiederholungen nicht erfolgreich sind und die Anforderung nicht abgeschlossen werden kann, müssen Sie zum Jersey-Standard-Connector HttpUrlConnector zurück wechseln. Weitere Informationen finden Sie unter Jersey-Standardwert HttpUrlConnectorProvider verwenden.

ObjectStorage-Client schließt Verbindungen nicht, wenn der Client geschlossen wird

Es sind zu viele Dateideskriptoren geöffnet, und das Schließen vorhandener Deskriptoren dauert zu lange. Eine Ausnahme kann folgendermaßen aussehen:

Caused by: java.io.FileNotFoundException: classes/caspertest.pem (Too many open files)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)

Um dieses Problem zu beheben, verwenden Sie einen der folgenden Workarounds.

  • Führen Sie diesen Aufruf durch, bevor Sie einen Client erstellen: System.setProperty("http.keepAlive", "false");
  • Verwenden Sie dieses Befehlszeilenargument, wenn Sie Java ausführen: -Dhttp.keepAlive=false

Serialisierungsfehler bei der Erstellung von Anforderungen oder Verarbeitung von Antworten

Ein UnrecognizedPropertyException -Fehler bei der Verarbeitung einer Antwort weist darauf hin, dass die Version der Jackson-Library ein Feature nicht unterstützt, das zur Laufzeit aus einer anderen Abhängigkeit im Classpath der Anwendung eingefügt wurde. Dieser Fehler tritt auch auf, wenn die Deserialisierungseigenschaft FAIL_ON_UNKNOWN_PROPERTIES für den konfigurierten ObjectMapper auf false gesetzt ist.

Lösung:

Ermitteln Sie, welche Version der Jackson-Library im Classpath Ihrer Anwendung referenziert ist, und führen Sie gegebenenfalls ein Upgrade auf Version 2.9.5 aus. Eine vollständige Liste der Jackson-Librarys, von denen das SDK für Java abhängig ist, finden Sie in der Datei pom.xml auf GitHub.

Hinweis

Wenn Sie einen Client bei dessen Instanziierung in der Anwendung anpassen, müssen Sie den vorkonfigurierten ObjectMapper aus RestClientFactory mit der Methode RestClientFactory#getObjectMapper() referenzieren.

Eine alternative Lösung ist die Verwendung der schattierten Version der JAR-Datei des SDK für Java, die eine gebündelte Version der Jackson-Librarys enthält.

Fehler mit Verschlüsselungsschlüsselgröße

Standardmäßig kann das SDK für Java nur Schlüssel mit einer Länge von höchstens 128 Bit verarbeiten. Benutzer erhalten die Fehler "Ausnahme: Ungültiger Schlüssel" und "Unzulässige Schlüsselgröße", wenn sie längere Schlüssel wie AES256 verwenden.

Um dieses Problem zu beheben, verwenden Sie einen der folgenden Workarounds.

Servicefehler beheben

Jeder Vorgang, der zu einem Servicefehler führt, verursacht eine Ausnahme vom Typ com.oracle.bmc.model.BmcException, die vom SDK ausgelöst wird. Informationen zu häufigen Servicefehlern, die von OCI zurückgegeben werden, finden Sie unter API-Fehler.