IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

ORA-29532: appel Java arrêté par une exception Java non interceptée : java.lang.NoClassDefFoundError


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut ORA-29532: appel Java arrêté par une exception Java non interceptée : java.lang.NoClassDefFoundError
    Bonjour,

    J'ai crée une procédure stockée faisant appel à du code Java. Le problème est que lors de l'exécution PL/SQL, le message d'erreur suivant apparaît :

    ORA-29532: appel Java arrêté par une exception Java non interceptée : java.lang.NoClassDefFoundError
    Le bout de code en question est le suivant:

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "HASH_SHA1"
    AS package pg_hash_sha1;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import org.apache.xml.security.utils.Base64;
     
    public class hash {
     
            public static String sha1 (String passwdClair)
    		{
    			byte[] uniqueKey = passwdClair.getBytes();
    			byte[] hash = null;
    			try
    			{
    		      // on récupère un objet qui permettra de crypter la chaine
    		      hash = MessageDigest.getInstance("SHA-1").digest(uniqueKey);
                } catch (NoSuchAlgorithmException e) {
                    throw new Error("no SHA-1 support in this VM");
                  }
     
    			String buffer = Base64.encode(hash);
    			return buffer;	
    		}
     
    };
    /

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE FUNCTION hash_blog(p_content varchar2) RETURN varchar2
     AS LANGUAGE JAVA
      NAME 'pg_hash_sha1.hash.sha1(java.lang.String) return java.lang.String';
    /
     
    SELECT hash_blog('4238960308960013') FROM dual;

    Avez-vous une idée pour résoudre cette erreur ?

    Merci par avance

  2. #2
    Membre régulier
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Salut,

    Je viens de trouver la solution.

    La version JAR incluant la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.apache.xml.security.utils.Base64;
    n'était pas la bonne. Il m'a suffit de charger une mise à jour de cette librairie (xmlsec-1.4.3.jar au lieu de xmlsec-1.3.0.jar) via la commande:

    loadjava -thin -user user/passwd@IP_SERVER:port:sid-r -v -f -s -grant public -noverify -genmissing file_name.jar


  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pourquoi Java appelé via wrapper PL/SQL quand vous avez Dbms_Crypto et UtL_Encode ?

  4. #4
    Membre régulier
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    J'ai testé ces 2 options mais le résultat n'était pas correcte.

    A ce qui semble SHA-1 n'est pas pris en charge en PL/SQL, la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DBMS_CRYPTO.HASH('4238960308960013',3) FROM dual;
    supposée être pour SHA donne le résultat : 4E416AACE3AD56009BF883E19EECF742DDD7BDB4

    tandis que l'exécution via wrapper Java donne le résultat : eilX3wt04ti0EADC8htCs6GJF4I=

    (2ème résultat qui est correcte).

    S'il y a une méthode plus simple qui donnera le même résultat pour la même chaine de caractère, je prends

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Dixit la documentation, DBMS_CRYPTO.HASH reçoit un RAW / BLOB / CLOB, pas un VARCHAR.
    Dixit cette même documentation, il suffit de convertir !

    Essayez ainsi (DBMS_CRYPTO n'est pas installé sur ma machine de test, je ne peux donc pas vérifier le résultat) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT UTL_I18N.RAW_TO_CHAR(DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW('4238960308960013','AL32UTF8'), 3),'AL32UTF8') as test
      FROM dual;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/01/2012, 22h19
  2. Appel d'une classe Java par une page HTML
    Par kqman dans le forum Général Java
    Réponses: 7
    Dernier message: 06/04/2011, 14h58
  3. connecter par une url et non en saisie
    Par xouzi dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 19/01/2011, 14h52
  4. PL SQL Appel d’une function par une autre
    Par Fiona08 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 21/05/2010, 12h22
  5. Réponses: 0
    Dernier message: 19/12/2008, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo