java.lang.NoSuchMethodError

Saludos Cordiales Compañeros.

tengo el siguiente problema que no se como resolverlo.

tengo un web service y al momento de probar me sale el siguiente Error
java.lang.NoSuchMethodError: es.mityc.firmaJava.libreria.xades.DataToSign.setXadesFormat(Les/mityc/javasign/EnumFormatoFirma;)V
Antes si funcionaba bien pero hice unos cambioes y no me esta funcionando bien.

@Override
protected DataToSign createDataToSign() throws FirmaException{
DataToSign dataToSign = new DataToSign();
try {
dataToSign.setXadesFormat(EnumFormatoFirma.XAdES_BES);// AQUI ES DONDE DA LA EXCEPCION
dataToSign.setEsquema(XAdESSchemas.XAdES_132);
dataToSign.setXMLEncoding("UTF-8");
dataToSign.setEnveloped(true);
Document docToSign = getDocument(getSignatureFileName());
dataToSign.setDocument(docToSign);
dataToSign.addObject(new ObjectToSign(new InternObjectToSign("comprobante"), "comprobante", null, "text/xml", null));
}catch (Exception ex){
dataToSign = null;
ex.printStackTrace();
log.error(ex);
throw new FirmaException(ex.getMessage());
}

return dataToSign;
}

cuando hago las pruebas unitarias me funciona correctamente, pero al generar el Jar y agregarlo a otro proyecto es donde se presenta el problema.

Gracias por su respuesta.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Cid

Prueba tu servicio con SoapUI

Recuerda siempre colocar tu código entre las etiquetas code o blockcode, en cuanto a tu problema puede ser que si realizaste cambios y no publicaste de nuevo el WSDL pues no los tome en cuenta y por eso marque el error, en cuanto a tus pruebas de unidad pues pueden estar bien pero no lo estas probando como un servicio web si no como un simple método, te recomiendo usar:

SoapUI

Si de plano quieres usar pruebas de unidad, checa:

aquí

Sería útil que colocaras el código de tus pruebas de unidad, y otra cosa ¿ lo empaquetas en un jar o en un war ?

jar con pruebas de unidad (este servicio lo implementan con ejb).

Asumo que tu servicio es soap.

Varias versiones de la misma clase

Podrías revisar si la clase DataToSign se encuentra en una biblioteca separada. Si los dos proyectos (el de tu WS y donde ejecutas las pruebas) hacen referencia a ella, seguramente tienes un problema con la versión de alguno de ellos. Algo que también puede ser posible es que te planches la clase si la tienes en varias partes.

EL problema es claro, la firma de tu método de acceso no existe, puede que tengas el setter pero recibe otro tipo de dato.

Imagen de Cid

En efecto conflicto de versiones

java.lang.NoSuchMethodError: es.mityc.firmaJava.libreria.xades.DataToSign.setXadesFormat(Les/mityc/javasign/EnumFormatoFirma;)V

Lo que espera el compilador es lo siguiente pero no lo encontró en la clase:

void es.mityc.firmaJava.libreria.xades.DataToSign.setXadesFormat(es.mityc.javasign.EnumFormatoFirma variable)

la V significa que devolvería void y la L un tipo de dato en tu caso EnumFormatoFirma

tabla interpretación java spec

java.lang.NoSuchMethodError: es.mityc.firmaJava.libreria.xades.D

Muchas Gracias por sus Comentarios.

SrCid, yo tengo un jar en donde se realiza la firma de un XML y funciona cuando prueba solo el jar, pero cuando lo agrego a un web services y hago las pruebas a traves de el SoapUI, me sale el error. la verdad ya no se que hacer.

El problema en si es este Jar MITyCLibXADES-1.1.7.

• Re: NoSuchMethodError •

 

Como Hiroshige ya lo mencionó, se están utilizando diferentes versiones de la clase en tiempo de compilación y en tiempo de ejecución. Una forma muy simple de saber a qué archivo JAR pertenece cierta clase o su ubicación en tiempo de ejecución es utilizando un fragmento de código similar al siguiente:

import java.net.URL;

public class Main {

    public static void main(String[] args) {
        System.out.println(getLocation(String.class));
        System.out.println(getLocation(Main.class));
    }

    public static URL getLocation(Class<?> clazz) {
        return clazz.getResource('/' + clazz.getName().replace('.', '/') + ".class");
    }

}

Ver demo en línea.

~~~

Te falta poner el jar en tu

Te falta poner el mismo el jar en tu webservice.

Puedes resolver las dependencias de tu proyecto usando una herramienta como Maven o gradle para que no te pase esto teniendo que copiar los jars entre tu ambiente de pruebas y donde lo instalas.

Re: te falta

Si el archivo JAR faltara, entonces el servidor se quejaría con java.lang.ClassNotFoundException o java.lang.NoClassDefFoundError (dependiendo de la implementación).

Correcto, corregí la

Correcto, corregí la redacción: te falta poner el *mismo* jar en tu ws