ClassCastException aber warum?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
folgender Code:

Code:
import org.apache.struts.action.*;
import javax.servlet.http.*;
import javax.servlet.*;
import de.axa.sso.SSOHandler;
import java.io.*;
import java.util.*;

public class GetResultServlet extends HttpServlet
{
  public void service(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException
  {
    res.setContentType("text/html");
    ServletOutputStream  out = res.getOutputStream();
    out.println("<html>");
    out.println("<head>");

    String title = "GetResultServlet";
    out.println("<title>" + title + "</title>");
    out.println("</head>");
    out.println("<body bgcolor=\"white\">");
    out.println("<h1>" + title + "</h1>");

    ServletContext sc = getServletContext();
    ServletContext tc = sc.getContext("/SSO-Master");

    String test = "";
    Object o = null;
    String result = "";

    if(tc!=null)
    {
      Enumeration e = tc.getAttributeNames();
      while(e.hasMoreElements())
        test += (String)e.nextElement() + ", ";

      o = tc.getAttribute("SSOHandler");
    }
    else
      test="tc=null";

    SSOHandler ssohandler = null;

    try
    {
      System.out.println("name..................: " + o.getClass().getName());
      ssohandler = (SSOHandler) o;
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }

letzere also ssohandler = (SSOHandler) o; schmeisst mir immer die ClassCastException, obwohl ich o mit ClassName die richtige Class habe (also SSOHandler) und per Debug auch sehen konnte, dass es um die Klasse handelt.
Habt Ihr einen Tip?
 
G

Guest

Gast
was heisst FullName?
Mit instance of krieg ich false, das ist ja das seltsame...
 
G

Guest

Gast
wenn du kompletten pacckage pfad meinst, ja gibt er mit mit classname aus...
 

Bleiglanz

Gesperrter Benutzer
sorry, war Fullname war käse

ist das die Situation:
Code:
o.getName().equals("de.axa.sso.SSOHandler") // ==true

(o instanceof de.axa.sso.SSOHandler) // ==false

kann eigentlich nicht sein, es sein denn es sind ganz schräge classloading probleme am werk, welche Servlet-Engine hast du denn am laufen...?
 
G

Guest

Gast
ja genau diese situation. ich hab den tomcat 4.1.

wie kann ich class-loading probleme denn feststellen?
 

Bleiglanz

Gesperrter Benutzer
oops, hab deinen code gerade mal angeschaut

du willst ja "contextübergreifend" arbeiten

Code:
    ServletContext sc = getServletContext();
    ServletContext tc = sc.getContext("/SSO-Master");

und der SSO-Master Context hat wahrscheinlich einen eigenen Classloader...

warum überschreibst du in einem HttpServlet die Service Methode, das ist schon mal schräg...

bist du sicher dass das so geht, ich glaubs ja nicht...?

offenbar gehts um Singe-Sign-On, frag mal den Autor von SSOHandler wie er sich das vorstellt...
 
G

Guest

Gast
genau das ist der punkt. man kann den tomcat so konfigurieren. d.h. ein parameter

crossContext="true"

setzen. genau single sign on. ich hab 2 anwendungen (master und slave) master schreibt ein cookie und schreibt den ssohandler in den kontext. slave anwendung holt sich den cookie und überprüft den mittels den im context enthaltenen ssohandler.

ich brauch den autor nicht zu fragen, bin der selber ;)

woran kann es sonst liegen ? wie gesagt, kontexte kann man über den parameter anwendungsübergreifend holen
 

Bleiglanz

Gesperrter Benutzer
ja, aber jede webapp hat i.A. einen eigenen Classloader, so dass die Klasse

de.axa.sso.SSOHandler

in webapp1 eine andere ist als in webapp2....
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben