2012-05-04 2 views
0

J'ai ajouté les fichiers JAR externes au répertoire 'lib' (configuration du serveur GlassFish). Malgré cela, mon application se heurte à cette exception.Application Java EE impossible d'accéder aux fichiers JAR externes ajoutés à GlassFish lib sur Jelastic Cloud

exception 

javax.servlet.ServletException: PWC1392: Error instantiating servlet class bose.MainServlet 

root cause 

java.lang.NoClassDefFoundError: org/expressme/openid/OpenIdException 

root cause 

java.lang.ClassNotFoundException: org.expressme.openid.OpenIdException 

OU

au hasard, je reçois un

Servlet MainServlet is not available 

L'application fonctionne localement perfecty. Cependant, il ne peut pas s'exécuter sur Jelastic.

C'est le JAR J'ai ajouté: http://code.google.com/p/jopenid/

Après la navigation vers cette page (http://boseapp1.jelastic.servint.net/login.jsp), si l'on clique sur l'image Google/Yahoo. la requête va à une servlet (MainServlet), où la bibliothèque OpenID est utilisée. C'est là que l'application tombe dans une exception.

Où est-ce que je me trompe?

Voici le code de servlet:

package bose; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.HashSet; 
import java.util.Set; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.expressme.openid.Association; 

import org.expressme.openid.Authentication; 
import org.expressme.openid.Endpoint; 
import org.expressme.openid.OpenIdException; 
import org.expressme.openid.OpenIdManager; 
/** 
* 
* @author root 
*/ 
public class MainServlet extends HttpServlet { 

     static final long ONE_HOUR = 3600000L; 
    static final long TWO_HOUR = ONE_HOUR * 2L; 
    static final String ATTR_MAC = "openid_mac"; 
    static final String ATTR_ALIAS = "openid_alias"; 

    private OpenIdManager manager; 

    @Override 
    public void init() throws ServletException { 
     super.init(); 
     manager = new OpenIdManager(); 
     manager.setRealm("http://boseapp1.jelastic.servint.net/"); 
     manager.setReturnTo("http://boseapp1.jelastic.servint.net/openid"); 
    } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

      // manager.setRealm(request.getrequest.getContextPath()); 
     //manager.setReturnTo(request.getContentType()+"/openid"); 

     String op = request.getParameter("op"); 
     if (op==null) { 
          // check sign on result from Google or Yahoo: 
          checkNonce(request.getParameter("openid.response_nonce")); 
          // get authentication: 
          byte[] mac_key = (byte[]) request.getSession().getAttribute(ATTR_MAC); 
          String alias = (String) request.getSession().getAttribute(ATTR_ALIAS); 
          Authentication authentication = manager.getAuthentication(request, mac_key, alias); 
          response.setContentType("text/html; charset=UTF-8"); 
         // showAuthentication(response.getWriter(), authentication); 



         request.getSession().setAttribute("name",authentication.getFullname()); 
         request.getSession().setAttribute("email",authentication.getEmail()); 
         request.getSession().setAttribute("gender",authentication.getGender()); 

         if(User.checkUserPresence(authentication.getEmail())) 
         { 
          response.sendRedirect(request.getContextPath()+"/problem_list.jsp"); 
          return; 
         } 
         else 
         { 
          response.sendRedirect(request.getContextPath()+"/completeProfile.jsp"); 
          return; 
         } 
     } 
     if (op.equals("Google") || op.equals("Yahoo")) { 
      // redirect to Google or Yahoo sign on page: 
      Endpoint endpoint = manager.lookupEndpoint(op); 
      Association association = manager.lookupAssociation(endpoint); 
      request.getSession().setAttribute(ATTR_MAC, association.getRawMacKey()); 
      request.getSession().setAttribute(ATTR_ALIAS, endpoint.getAlias()); 
      String url = manager.getAuthenticationUrl(endpoint, association); 
      response.sendRedirect(url); 
     } 
     else { 
      throw new ServletException("Unsupported OP: " + op); 
     } 
    } 

    void showAuthentication(PrintWriter pw, Authentication auth) { 
     pw.print("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title>Test JOpenID</title></head><body><h1>You have successfully signed on!</h1>"); 
     pw.print("<p>Identity: " + auth.getIdentity() + "</p>"); 
     pw.print("<p>Email: " + auth.getEmail() + "</p>"); 
     pw.print("<p>Full name: " + auth.getFullname() + "</p>"); 
     pw.print("<p>First name: " + auth.getFirstname() + "</p>"); 
     pw.print("<p>Last name: " + auth.getLastname() + "</p>"); 
     pw.print("<p>Gender: " + auth.getGender() + "</p>"); 
     pw.print("<p>Language: " + auth.getLanguage() + "</p>"); 
     pw.print("</body></html>"); 
     pw.flush(); 


    } 

    void checkNonce(String nonce) { 
     // check response_nonce to prevent replay-attack: 
     if (nonce==null || nonce.length()<20) 
      throw new OpenIdException("Verify failed."); 
     // make sure the time of server is correct: 
     long nonceTime = getNonceTime(nonce); 
     long diff = Math.abs(System.currentTimeMillis() - nonceTime); 
     if (diff > ONE_HOUR) 
      throw new OpenIdException("Bad nonce time."); 
     if (isNonceExist(nonce)) 
      throw new OpenIdException("Verify nonce failed."); 
     storeNonce(nonce, nonceTime + TWO_HOUR); 
    } 

    // simulate a database that store all nonce: 
    private Set<String> nonceDb = new HashSet<String>(); 

    // check if nonce is exist in database: 
    boolean isNonceExist(String nonce) { 
     return nonceDb.contains(nonce); 
    } 

    // store nonce in database: 
    void storeNonce(String nonce, long expires) { 
     nonceDb.add(nonce); 
    } 

    long getNonceTime(String nonce) { 
     try { 
      return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") 
        .parse(nonce.substring(0, 19) + "+0000") 
        .getTime(); 
     } 
     catch(ParseException e) { 
      throw new OpenIdException("Bad nonce time."); 
     } 
    } 
} 

Répondre

0


Avez-vous redémarré votre serveur d'applications après avoir ajouté la bibliothèque?
Si oui, vous pouvez également essayer de déployer votre application sur un autre serveur.

+0

Oui, j'ai essayé de le redémarrer.N'a pas fonctionné. J'utilise Glassfish comme c'est là où il a été configuré et testé localement. Est-ce que tu me demandes d'essayer Jetty/Tomcat? – sbose

+0

Le problème a été résolu après avoir basculé vers Tomcat 6. – sbose

+0

Mais cela ne devrait-il pas fonctionner avec Glassfish? J'ai utilisé Glassfish pour le développement. – sbose

Questions connexes