Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/05/2011, 14h07   #1
Nouveau Membre du Club
 
Inscription : mai 2009
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 79
Points : 26
Points : 26
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 :

Citation:
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 :
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 :
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
labolabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h11   #2
Nouveau Membre du Club
 
Inscription : mai 2009
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 79
Points : 26
Points : 26
Salut,

Je viens de trouver la solution.

La version JAR incluant la ligne

Code :
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

labolabs est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 26/05/2011, 16h45   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 808
Points : 5 808
Pourquoi Java appelé via wrapper PL/SQL quand vous avez Dbms_Crypto et UtL_Encode ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h56   #4
Nouveau Membre du Club
 
Inscription : mai 2009
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 79
Points : 26
Points : 26
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 :
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
labolabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 17h56   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 :
1
2
SELECT UTL_I18N.RAW_TO_CHAR(DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW('4238960308960013','AL32UTF8'), 3),'AL32UTF8') AS test
  FROM dual;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h47.


 
 
 
 
Partenaires

Hébergement Web