Contract-first - лучший подход ИМХО. Причина довольно проста. Когда вы сначала кодируете код и генерируете WSDL, он может измениться. Это может вызвать проблемы у других команд, работающих над клиентским кодом на основе этого WSDL.
В случае контракта сначала WSDL всегда будет предметом обсуждения между командами, и он будет меняться не только из-за изменений кода, но только тогда, когда все стороны согласны.
В нем также лучше использовать версионирование.
Вы можете создать WSDL в Eclipse, который также имеет отличные проверки (требуется доступ в Интернет).