He utilizado ambos enfoques. Mi sugerencia es usar primer contrato esquema, pero codificar primero WSDL.
Escribir un archivo WSDL tiene muchos matices extraños como enlaces, puertos y tal. Prefiero tener esto hecho por herramientas en lugar de hacerlo a mano. Hay herramientas para ayudar a hacer esto, pero ninguno de ellos son más simples que
@WebService
public ...
Por lo menos se puede verificar su implementación.
Para el esquema, sugerí contrato primero porque el lenguaje de esquema XML es mucho más rico que lo que puede describir en Java. Un ejemplo que suelo dar es que XML Schema puede restringir el tamaño de una cadena y aplicar un patrón de expresión regular. Hacer eso en Java y anotaciones parece un poco más complicado.
Otra ventaja de hacer el esquema como contrato primero es la presencia de herramientas para convertir su archivo de esquema en documentación HTML.
La herramienta XJC puede generar los archivos de clase requeridos. Sin embargo, solo recomendaría hacerlo al comienzo.
Al final debe tomar el archivo WSDL generado y trabajar con eso en su lugar. De esta forma, puede usar wsimport y verificar que todo, desde WSDL hasta Schema, sea válido.
Puede implementar con el archivo WSDL utilizando el atributo wsdlLocation en su implementación @WebService y el servidor de aplicaciones arreglará los datos de enlace por usted cuando los usuarios soliciten el WSDL del servidor, pero aún conserva sus anotaciones. De lo contrario, sus anotaciones no aparecerán en los archivos WSDL solicitados.
Dado que la pregunta se refiere a las ventajas y desventajas de cada lado, no veo que sea subjetiva. –