Serialization of Interface Reference for an Implementation Class fails at De-serialization-Collection of common programming errors

I’ll try and explain my problem as concisely and clearly as possible. I feel that what I’m trying might inherently be wrong, but somehow I believe it should work. So please feel free to treat this post as a mere clarification about the Serialization mechanism.

So, I have an Interface implemented by a class [it’s implied they exist in separate files].

// ----- SomeInterface.java
public interface SomeInterface extends Serializable
{
    public void setMsg(String msg);
    public void printMsg();
}

// ----- SomeImpl.java
public class SomeImpl implements SomeInterface
{
    private String msg;
    public void setMsg(String msg)
    {
        this.msg = msg;
    }


    public void printMsg()
    {
        System.out.println("Msg is: " +msg);
    }

}

Now I serialize an instance of [tt]SomeImpl[/tt]class:

...
    public void SomeMethInSomeClass()
    { 
        FileOutputStream fos = new FileOutputStream(new File("c:/test.ser"));
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        SomeInterface si = new SomeImpl();

        si.setMsg("blah blah");
        oos.writeObject(test);

        oos.close();
        fos.close();
        System.out.println("------ done -------");
    }

Now in a separate project, I have a JAR of the application above which contains the interface SomeInterface, but not the implementation class SomeImpl. In this application if I try to do the following:

....
....
    public void deserialiserMethod() throws Exception
    {
        FileInputStream fis = new FileInputStream(new File("c:/test.ser"));
        ObjectInputStream ois = new ObjectInputStream(fis);
        SomeInterface si = null;

        System.out.println("------ reading ----------");
        si = (SomeInterface) ois.readObject();
        si.printMsg();
        System.out.println("------- done ----------");
        ois.close();
        fis.close();
    }
....

… I get a ClassNotFoundException [for SomeImpl]. Now I know that my other project does NOT have the SomeImpl class in its classpath. But shouldn’t casting into a reference of the parent interface take care of that dependency?

thanks for your inputs!