public static JSmoothModelBean load(File fin) throws IOException {
    FileReader fr = new FileReader(fin);
    try {
      JSmoothModelBean jobj = new JSmoothModelBean();
      String INVALID = "INVALID";
      jobj.setSkeletonName(INVALID);
      JOXBeanReader jbr = new JOXBeanReader(fr);
      jbr.readObject(jobj);
      jbr.close();
      fr.close();

      if (jobj.getSkeletonName() == INVALID) {
        throw new Exception("Not a JOX File");
      }
      //		System.out.println("Loaded jobj " + jobj + " = " + jobj.getJarLocation());
      if ((jobj.getJarLocation() != null) && (jobj.getJarLocation().length() > 0)) {
        jobj.setEmbeddedJar(true);
        //			System.out.println("Set embeddedjar to " + jobj.getEmbeddedJar());
      }

      return jobj;

    } catch (Exception exc) {
      fr.close();

      try {
        FileInputStream fis = new FileInputStream(fin);
        XMLDecoder dec = new XMLDecoder(fis);
        JSmoothModelBean xobj = (JSmoothModelBean) dec.readObject();
        fis.close();

        if ((xobj.getJarLocation() != null) && (xobj.getJarLocation().length() > 0))
          xobj.setEmbeddedJar(true);

        return xobj;

      } catch (Exception exc2) {
        exc2.printStackTrace();
        throw new IOException(exc2.toString());
      }
    }
  }
  public static void save(File fout, JSmoothModelBean obj) throws IOException {
    //	FileOutputStream fos = new FileOutputStream(fout);
    try {
      // 		XMLEncoder enc = new XMLEncoder(fos);
      // 		enc.writeObject(obj);
      // 		enc.close();

      String jarloc = obj.getJarLocation();
      if (obj.getEmbeddedJar() == false) obj.setJarLocation(null);

      FileWriter fw = new FileWriter(fout);
      JOXBeanWriter jbw = new JOXBeanWriter(fw);
      jbw.writeObject("jsmoothproject", obj);
      jbw.close();
      fw.close();

      obj.setJarLocation(jarloc);

    } catch (Exception ex) {
      throw new IOException(ex.toString());
    } finally {
      //		    fos.close();
    }
  }