2016-03-10 5 views
0

Je suis en train de créer un programme pour enregistrer un utilisateur et lui permettre d '"acheter" un ebook via Corba. La principale erreur que je reçois est la suivante:IDL Abstract Method Error

BookServant is not abstract and does not override abstract method storeUserDetails(UserDetails) in distBkOperations 

Le ebook.idl ressemble actuellement les suivantes:

module BookAny { 

struct UserDetails { 
    string name; 
    string password; 
}; 

struct BookDetails { 
    string bookID; 
    string title; 
    string price; 
}; 


interface distBk { 
void storeUserDetails(in UserDetails myUserDetails); 
any getUserDetails(in string name, out any myUserDetails); 

void storeBookDetails(in BookDetails myBookDetails); 
any getBookDetails(in string title, out any myBookDetails); 
}; }; 

BookServant.java se présente comme suit:

import java.io.*; 
import java.util.*; 
import BookAny.*; 
import org.omg.CORBA.*; 

public class BookServant implements distBkOperations{ 
    public static Hashtable hashtable; 
    public static ORB orb; 

public BookServant (org.omg.CORBA.ORB orb){ 
     hashtable = new Hashtable(); 
     this.orb=orb; 
} 

public void storeUserDetails (BookAny.UserDetails myUserDetails, AnyHolder password){ 

    Any pass = orb.create_any(); 

    myUserDetails.password="safepasswordlol"; 

    pass.insert_string(myUserDetails.password); 

    password.value = pass; 


    hashtable.put(myUserDetails.name, myUserDetails); 
    System.out.println(myUserDetails.name + " You have registered and your password is " +myUserDetails.password+myUserDetails.name); 

} 

public Any getUserDetails (String name, AnyHolder myUserDetails){ 

Any anyAB = orb.create_any(); 
try { 
    UserDetails tempAddrBook = (UserDetails)hashtable.get(name); 

    UserDetailsHelper.insert(anyAB, tempAddrBook); 
    myUserDetails.value = anyAB; 
}catch (Exception e) { 
    System.err.println("Error E: "+e); 
    e.printStackTrace(System.out); 
    } 
} 


/* public void getUserDetails (String name, org.omg.CORBA.AnyHolder myUserDetails){ 

Any anyAB = orb.create_any(); 
try { 
    UserDetails tempAddrBook = (UserDetails)hashtable.get(name); 

    UserDetailsHelper.insert(anyAB, tempAddrBook); 
    myUserDetails.value = anyAB; 
}catch (Exception e) { 
    System.err.println("Error E: "+e); 
    e.printStackTrace(System.out); 
    } 
}*/ 
} 

je peux Générer les fichiers de l'IDL correctement, mais lorsque vous essayez de compiler le BookServant ou BookServer.java, j'obtiens l'erreur ci-dessus. J'ai essayé de changer l'interface d'idl de vide à tout et toujours rien. Toute aide serait appréciée!

Répondre

0

Comme l'erreur indique, votre fichier IDL a un seul paramètre dans l'une des opérations storeUserDetails, à savoir laisser tomber le 2ème paramètre dans le code Java

@Override 
public void storeUserDetails(BookAny.UserDetails myUserDetails) { 
+0

Essayé et je me fais toujours la même erreur message, d'autres suggestions? – Kaneo71

+0

vous devez toujours implémenter la version surchargée de 'storeUserDetails' à savoir celle avec le paramètre' BookDetails' – Reimeus