I went ahead and moved this to our Tableau Developer Community where it's more likely to receive a response.
I think I may have your answer. I am using the Java API and had a similar problem. Here is my original code to create the extract:
Extract extract = new Extract("C:/personal/Hadoop/Tableau Extract API/Person.tde");
The statement above is valid. But every time I interacted with the extract variable like extract.hasTable("Extract") I would get an Invalid Extract handle error. Here is the fix:
Extract extract = new Extract("C:\\personal\\Hadoop\\Tableau Extract API\\Person.tde");
Make sure if you are running on windows and have a fully qualified path that you use the double back slash in you directory structure.
I will try a full path, but unfortunately I don't know if this is the solution to my problem. Currently I am not specifying a path in the Extract so it should just place it where the jar exists. This small snippet of code didnt change in the version which worked vs the one that didnt.
Extract extract = new Extract("TestTableauReport.tde");
I had the same issue, but I figured out that anytime you specify the .tde directory make sure it exists. In Doug's example, you have to make sure the directory structure "C:\\personal\\Hadoop\\Tableau Extract API" exists. It seems that Tabelau API cannot build the path automatically.