Hi Ethan,
Thanks for sharing your code.
You're right that you should encode your image as a base64 data URL. We intend to make that easy, but right now it's kind of a hassle in the Java version (easier in .NET). External URLs are OK, too, but they have to be enabled for CORS, and I don't think wikipedia is.
One problem I see in this example is that you're writing the "id" and "availability" properties twice in the same packet, which results in invalid JSON. CesiumLanguageWriter is a low-level library with speed as a major goal, so it doesn't check for problems like this. As a general rule, don't call the same method twice on the same object or invalid JSON will be generated.
Another problem is that the "path" primitive is not yet supported in Cesium. It's on our near-term to-do list to hook that up, but currently it is ignored. Consider using a "polyline" primitive instead, which gets its points from the "vertexPositions" property.
I attached a new version of your TestScenario that generates CZML that loads correctly in the Cesium Viewer at
http://cesium.agi.com/CesiumViewer/. You can test it by writing the output to a file and dragging it into the viewer.
Kevin