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.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.
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.
-
Utilice una clave de 128 bits, como AES128.
-
Instale la jurisdicción de solidez ilimitada de Java Cryptography Extension (JCE) desde la siguiente ubicación: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
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.