The key thing here is the bean creation, that injects the link to the Groovy Service (which is just another Bean once Grails is running) into the groovyObject property of our CXF service. The other piece is just the simple method of creating a CXF service.
It is possible (in some cases - I haven't figured out why it works sometimes), to not use the intermediate Java Impl class, but rather configure the CXF Service to point straight at the Grails Service bean (provided it implements the interface). This makes it much faster, as you don't need to change the generated code at all (ideal).
In this case, the resources.xml would not have the <bean ...> and <ref bean="currencyConverter" /> becomes <ref bean="converterService"/>. Further exploration may explain why it works sometimes but not others (I get a strange error during startup of a Null parameter to CXF).
Step 4: Test!
When you run the application, you should see something like this appearing in the log: