Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Octsam en 18 Julio 2016, 13:14 pm



Título: Acceso restringido a librerías de Java
Publicado por: Octsam en 18 Julio 2016, 13:14 pm
Hola a todos. Yo quería implementar mi propia clase de Java, reescribiendo la clase HttpUrlConnection de Java, pero en la parte:

Código:
  import sun.net.www.http.HttpClient;
  import sun.net.www.http.PosterOutputStream;
  import sun.net.www.http.ChunkedInputStream;
  import sun.net.www.http.ChunkedOutputStream;


En cada una de las líneas aparece un subrayado rojo sinuoso indicando un error, con unos mensajes asociados los cuales son respectivamente:

Citar
     Access restriction: The type 'HttpClient' is not API (restriction on required library 'C:\Program Files\Java\jdk1.8.0_91\jre\lib\rt.jar')
      
      Access restriction: The type 'PosterOutputStream' is not API (restriction on required library 'C:\Program Files\Java\jdk1.8.0_91\jre\lib\rt.jar')
      
      Access restriction: The type 'ChunkedInputStream' is not API (restriction on required library 'C:\Program Files\Java\jdk1.8.0_91\jre\lib\rt.jar')

      Access restriction: The type 'ChunkedOutputStream' is not API (restriction on required library 'C:\Program Files\Java\jdk1.8.0_91\jre\lib\rt.jar')


Por ello tengo varias preguntas, que me intrigan desde hace mucho tiempo:

   1) ¿Cómo pueden restringir el acceso a una librería, aunque sea utilizado por el lenguaje en otras clases predefinidas, que sí puedo utilizar?

   2) ¿Podría restringir el uso de una clase hecha por mí?

   3) ¿Puedo utilizar de algún modo tales clases restringidas, en una clase hecha por mí?


Y gracias por vuestra atención.

Bueno. Parece que no gustó mucho el problema que propuse, y cuya solución hallé al menos en parte.

En acceso restringido a ciertas librerías, es una limitación de configuración del entorno de desarrollo, que puede ser eliminada. Para hacerlo en eclipse, hay que hacer clic con el botón derecho del ratón sobre la carpeta del proyecto, para desplegar el menú contextual,  ir a Propiedades --> Java Compiler --> Error/Warnings --> Deprecated and restricted API; y en la lista asociada a la línea que pone "Forbidden reference (access rules)", cambiar la opción "Error" por cualquier otra.

"Java compiler" es una opción de una lista, que tiene una sublista que hay que desplegar para acceder a "Error/Warnings".
"Deprecated and restricted API" es una opción de una lista, sobre la que hay que hacer clic para desplegar su cuadro de opciones, pero como la que está desplegada por defecto es la opción primera, que es de contenido extenso, puede parecer que no está.

Entonces, respondiendo a cada una de las cosas que pregunté:

1) Programando el entorno de desarrollo para que considere ciertas clases restringidas.

2) El entorno de desarrollo no da la opción de decidir cuáles son las clases restringidas, por lo que no, a menos que sea modificado el código fuente del entorno para ello, y serviría para el nuevo entorno de programación solamente.

3) Sí, como ya he indicado.

Me olvidé de un detalle: la lista de opciones asociado a "Error/Warnings" está desactivada, y hay que activarloa marcando la casilla superior de la ventana, que pone "Enable project specific settings".

MOD EDIT: No hacer doble post.