Trzymałbym się z dala od groovywów, to jest do bani. Po rozejrzeniu się w końcu wybrałem rozwiązanie polegające na korzystaniu z usług internetowych wiosennych i serwisów internetowych opartych na umowach.
Klient tworzy instancję poleceń za pomocą metody toXml(), która generuje kod XML żądania mydła. Następnie użyj WebServiceTemplate do sendToEndpoint.
Dla serwera używamy punktów końcowych usług sieci Spring. Parsowanie przychodzącego xml jest dziecinnie proste i nie trzeba marnować XML-a na obiekt, jako że GPathResult uzyskany z XmlSlurpera jest całkowicie zarządzalny. Nasz serwer działa na wierzchu graalów, więc wykorzystaliśmy wtyczkę springws grails, dzięki czemu tworzenie punktów końcowych jest jeszcze łatwiejsze.
Jest jednak jedno zastrzeżenie. Wtyczka Springws dla Grails jest nieaktualna. Wiosenne serwisy internetowe to teraz wersja 2.x, a wtyczka springws pochodzi z 1.4.x. Jest jednak bardzo łatwy w użyciu bez wtyczki i myślę, że uaktualnienie wtyczki do nowszej wersji API nie jest trudne.
Ponadto, jeśli chcesz zrobić MTOM, springws staje się nieco bardziej skomplikowany, ponieważ musisz głębiej zagłębić się w obsługę wiadomości. Byłem w stanie zrobić całkiem zaawansowane zabezpieczenia ws-spring, ale nie ma problemu.
W przeciwnym razie użyłbym cxf (dobrze ładuje MTOM), jeśli chcesz trzymać się jax-ws et al. Przekroczenia są prawdopodobnie wyższe, ponieważ wszystkie dynamicznie generowane proxy i pojęcia. Co więcej, nie jest on oparty na umowach, co jest dla nas dużym plusem.
http://predic8.com/groovy-web-services-jax-ws.htm
http://cxf.apache.org/docs/how-do-i-develop-a-client.html
Moje wymagania dotyczące projektu, które zrodziły to pytanie, uległy zmianie, więc nie wypróbowałem bibliotek sugerowanych przez @ john-wagenleitnera, ale jego odpowiedź była najbardziej kompletna jako odpowiedź na moje pytanie. Dziękuję wszystkim za odpowiedzi! – matmer