One cannot run OpenDoPEHandler twice in the same jvm at the same time, as the static field shallowTraversor might be accessed in the wrong way by two parallel runs of preprocess.
The easiest way to cure this might be to make everything non-static. The most portable way might be to add some static helper methods to aid porting.
As an instant cure, I suggest adding a warning and/or synchronizing preprocess.