private void cppCreateClientStubHeader() throws ClassNotFoundException
    {
       	out.println("/* Generated with cppToJavaRpcStubGenerator by github.com/danfickle */");
	    out.println("#ifndef " + classNameWithUnderscores.toUpperCase());
	    out.println("#define " + classNameWithUnderscores.toUpperCase());
	    out.println("#include \"types_fwds.h\"");

	    if (cppIsTypeIncluded(cppGetPublicSuperclass(currentClass)))
	    		out.println("#include \"" + cppGetPublicSuperclass(currentClass).replace('.', '_').toLowerCase() + ".h\"");

	    out.println("namespace java {");
	    out.print("class " + classNameWithUnderscores);
    	out.println(" : public " + cppGetPublicSuperclass(currentClass).replace('.', '_') + " {");
    	out.println("public:");
	    
	    out.println("/***** Methods *****/");
	    for (int j = 0; j < methods.size(); j++)
	    {
	    	cppPrintMethodSignature(methods.get(j), false, false);
	    	out.println(";");
	    }

	    out.println("/***** Static Methods *****/");
	    for (int j = 0; j < statics.size(); j++)
	    {
	    	cppPrintMethodSignature(statics.get(j), false, true);
	    	out.println(";");
	    }
	    out.println("\tstatic bool instanceOf(cppToJavaRpc::Connection * conn, const java_object & o);");
	    
	    out.println("/***** Constructors *****/");
	    for(int cc = 0; cc < ctors.size(); cc++)
	    {
	    	out.print("\texplicit ");
	    	cppPrintCtorSignature(ctors.get(cc), false);
	    	out.println(";");
	    }
	    out.println("\texplicit " + classNameWithUnderscores + "(cppToJavaRpc::SafeJavaObjectIdPtr id);");
	    out.println("\texplicit " + classNameWithUnderscores + "();");
	    out.println("\texplicit " + classNameWithUnderscores + "(java_object & o);");

	    out.println("/***** Fields *****/");
	    for (int ff = 0; ff < fields.size(); ff++)
	    {
	    	cppPrintFieldSignature(fields.get(ff), false, false, false);
	    	if (!Modifier.isFinal(fields.get(ff).getModifiers()))
	    		cppPrintFieldSignature(fields.get(ff), false, false, true);
	    }

	    out.println("/***** Static Fields *****/");
	    for (int ff = 0; ff < sfields.size(); ff++)
	    {
	    	cppPrintFieldSignature(sfields.get(ff), false, true, false);
	    	if (!Modifier.isFinal(sfields.get(ff).getModifiers()))
	    		cppPrintFieldSignature(sfields.get(ff), false, true, true);
	    }

	    out.println("\tstatic int32_t JAVA_TYPE_ID;");
	    out.println("};\n}\n#endif");
    }