Hola,

Si al realizar la declaración de un array que sea de tipo DTO y al setear el primer dato en la posición [0], el sistema te muestra un NullPointerException, se debe a que al crear un array de objetos, se crea el array pero no se crean los objetos. Ejemplo:

MiDTO miArrayDTO[] = new MiDTO[10];
System.out.println(miArrayDTO.length); // Funciona
System.out.println(miArrayDTO[0].isEmpty()); // NullPointerException

Después de la primera línea del código de arriba, se tiene el objeto miArrayDTO (se puede utilizar miArrayDTO.length), pero ese objeto solo contiene 10 referencias (miArrayDTO[0], miArrayDTO[1]...) a null; las instancias a las que apuntan todavía se tienen que asignar. Si no se asigna una instancia a esas referencias, al intentar invocar métodos o atributos se lanzará el NullPointerException.

Suponga que la clase MiDTO, tiene los siguientes datos:

private String Id;
private DatosDTO[] datos;

La solución a ese NullPointerException es la siguiente:

MiDTO[] miArrayDTO = new MiDTO[10];

miArrayDTO[0] = new MiDTO();
miArrayDTO[0].setId("0");

DatosDTO[] datos = new DatosDTO[2];

datos[0] = new DatosDTO();
datos[0].setCodigoDato("1000");
datos[0].setValorDato("Valor 1000");

datos[1] = new DatosDTO();
datos[1]. setCodigoDato("2000");
datos[1]. setValorDato("Valor 2000");

datos[2] = new DatosDTO();
datos[2]. setCodigoDato("3000");
datos[2]. setValorDato("Valor 3000");

miArrayDTO[0].setDatos(datos);

Listo, de está forma se soluciona ese error muy común en instancias de Arrays DTO.

Basado en:

Hola, 

Si tienen o trabajan en un computador con un sistema operativo basado en Unix/Linux y requieren ver carpetas ocultas, utilicen el atajo de teclado:

ctrl + h


Esto permitirá mostrar todos los archivos ocultos en el equipo.


Nota:

Recuerden que las carpetas o archivos ocultos en Linux comienzan por . en el nombre, ejemplo: .data 

Si al compilar un archivo build.gradle de un proyecto, les salta el error: "Could not find com.oracle:ojdbc8:19.6.0.0" o una versi´n similar y su línea del .gradle está así:

dependencies {
    compile group: 'com.oracle.database.jdbc', name: 'ojdbc8', version: '19.6.0.0'
}


Se debe a que no encuentra la forma de obtener la librería en el repositorio al cual está apuntando.

Para solucionar este error, se debe agregar la línea:

compile group: 'com.oracle.database.jdbc', name: 'ucp', version: '19.6.0.0'

Dentro de dependencies, de la siguiente manera:

dependencies {
    compile group: 'com.oracle.database.jdbc', name: 'ojdbc8', version: '19.6.0.0'
    compile group: 'com.oracle.database.jdbc', name: 'ojdbc8', version: '19.6.0.0'
}

Listo, ya debería de permitir descargar la librería cuando compilen nuevamente el archivo .gradle.
Si se generan clases de un WSDL para la invocación de un SOAP y durante la ejecución sale el error: "java.lang.IllegalArgumentException: com.co.prueba.WSPruebaService referenced from a method is not visible from class loader", esto se debe a que al ser clases generadas, deben excluirse de Spring Devtools "reiniciar" el cargador de clases.

Para realizar esta exclusión se debe crear dentro de la carpeta resources, una carpeta con nombre: META-INF y ahí crear un archivo llamado: spring-devtools.properties, el cual tendrá el siguiente código:

restart.exclude.*
restart.exclude.mygeneratedclasses=/*[generated]*.class

Ruta completa del archivo creado: /src/main/resources/META-INF/spring-devtools.properties

La propiedad: restart.exclude.* permite excluir las clases del cargador de clases de reinicio.
La propiedad: restart.exclude.mygeneratedclasses=/*[generated]*.class permite excluir todas las clases con generatedword como parte del paquete o nombre de clase.


Con esto, se soluciona dicho error, ya no se debería de tener problemas con las clases generadas.
Al invocar un SOAP con clases autogeneradas, sale el error: "com.sun.xml.internal.ws.spi.db.DatabindingException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions Two classes have the same XML type name", esto se debe a que internamente el sistema encuentra clases con el mismo nombre en el namespace, tal cual la siguiente imagen:


Eso al parecer es un problema de código, el cual se soluciona agregando la anotación de XML: namespace="Nombre Namespace Unico", de la siguiente manera:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "prueba", propOrder = {
    "pruebaRequest"
},namespace="NOMBRE UNICO NAMESPACE")
public class Prueba {

Esto, se debe de realizar en las clases que están relacionadas con este error.


Listo, con esto se soluciona este error.

Fuente original:
Si al invocar un soap-webservices en java11, les sale el error: "javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not foun", se debe a que no encuentra la dependencia de sun, esto se soluciona de la siguiente manera:

En archivo pom.xml:

<dependency> 
    <groupId>com.sun.xml.ws</groupId> 
    <artifactId>rt</artifactId> 
    <version>2.3.1</version> 
</dependency>

En archivo build.gradle:

dependencies {
    compile group: 'com.sun.xml.ws', name: 'rt', version: '2.3.1'
}