Solución de problemas

Esta sección contiene información de resolución de problemas para el SDK para Java de Oracle Cloud Infrastructure.

Esta sección contiene información de resolución de problemas para el SDK para Java de Oracle Cloud Infrastructure.

El programa se bloquea durante un tiempo indefinido

Si una solicitud al servidor se bloquea durante un tiempo indefinido, podría deberse a que la conexión no se ha liberado del pool de conexiones.

El SDK para Java ahora soporta el conector Apache para enviar solicitudes y gestionar conexiones al servicio. El conector Apache soporta el pool de conexiones. Si un flujo no está cerrado, las conexiones no se liberan del pool de conexiones, lo que puede dar como resultado un tiempo de espera indefinido.
El SDK cierra automáticamente el flujo para liberar la conexión del pool de conexiones, pero solo cuando el flujo se ha leído completamente.
Para evitar bloqueos de programa, asegúrese de cerrar todos los flujos devueltos de la respuesta para liberar las conexiones del pool de conexiones a fin de evitar tiempos de espera indefinidos. Por ejemplo:
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

También puede volver al conector por defecto de Jersey HttpUrlConnector. Para obtener más información, consulte Uso de HttpUrlConnectorProvider por defecto de Jersey.

El servidor borra la conexión de la biblioteca de clientes Apache sin respuesta

En algunos casos, normalmente bajo una carga pesada, el servidor recibe una solicitud pero no la procesa. Esto puede hacer que el servidor borre la conexión al cliente sin proporcionar ninguna respuesta. HttpClient de Apache devuelve NoHttpResponseException cuando encuentra dicha condición. En estos casos, el HttpClient de Apache subyacente reintentará las solicitudes en el servidor y emitirá logs de nivel INFO sobre reintentos en el servidor. Si los reintentos fallan y la solicitud no se completa, debe volver al conector por defecto de Jersey HttpUrlConnector. Para obtener más información, consulte Uso de HttpUrlConnectorProvider por defecto de Jersey.

El cliente ObjectStorage no cierra las conexiones cuando el cliente está cerrado.

Se han abierto demasiados descriptores de archivos y tarda demasiado en cerrar los existentes. Una excepción puede tener este aspecto:

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)

Utilice una de las siguientes soluciones alternativas para solucionar este problema.

  • Realice esta llamada antes de crear un cliente: System.setProperty("http.keepAlive", "false");
  • Utilice este argumento de la línea de comandos al ejecutar Java: -Dhttp.keepAlive=false

Errores de serialización al realizar solicitudes o manejar respuestas

Un error UnrecognizedPropertyException al manejar una respuesta indica que la versión de la biblioteca Jackson no soporta una función que se inyectó en tiempo de ejecución desde otra dependencia a la classpath de la aplicación. Esto sucede incluso si la propiedad de deserialización FAIL_ON_UNKNOWN_PROPERTIES se define en false para el ObjectMapper configurado.

Solución:

Determine a qué versión de las bibliotecas Jackson se hace referencia en la classpath de la aplicación y, si es necesario, actualice a la versión 2.9.5. Para obtener una lista completa de las bibliotecas Jackson de las que depende el SDK para Java, consulte el archivo pom.xml que está alojado en GitHub.

Nota

Si personaliza un cliente cuando se instancia en la aplicación, asegúrese de que hace referencia a ObjectMapper preconfigurado desde RestClientFactory mediante el método RestClientFactory#getObjectMapper().

Una solución alternativa es utilizar la versión sombreada del archivo jar del SDK para Java, que incluye una versión integrada de las bibliotecas Jackson.

Errores de tamaño de clave de cifrado

Por defecto, el SDK para Java solo puede manejar claves con una longitud de 128 bits o inferior. Los usuarios obtienen los errores "Excepción de clave no válida" y "Tamaño de clave no válido" cuando utilizan claves más largas, como AES256.

Utilice una de las siguientes soluciones alternativas para solucionar este problema.

Solución de errores de servicio

Cualquier operación que dé como resultado un error de servicio provocará una excepción de tipo com.oracle.bmc.model.BmcException que debe devolver el SDK. Para obtener más información sobre los errores de servicio comunes devueltos por OCI, consulte Errores de API.