Well, for a Cucumber-like framework running on the JVM, you can use cucumber-jvm. In the github page, there are examples for a variety of java and java-based languages such as Groovy and Scala.
I don't really understand what you mean by "internal" dsl. Cucumber-jvm features are plain Given-When-Then user stories in .feature files, why wouldn't they fit your definition?
I've been using it with Java and Junit, it's almost as simple as Cucumber's ruby implementation.