Sto creando alcuni servizi utilizzando JAX-RS che devono prendere in oggetti arbitrariamente complessi come argomenti, non solo primitive come interi e stringhe. A discussion on the CXF mailing list dice di usare solo un oggetto wrapper come parametro singolo in questo caso.Creare e collegare XSD a un WADL
La mia preoccupazione è come documentare il formato di input per il servizio? Se la creazione di un servizio che sembra qualcosa di simile al seguente:
@POST
@Produces("application/json")
@Consumes("application/json")
@Path("oneParam")
public ComplexObject2 myServiceMethod(ComplexObject1 obj) {
Foo f = obj.foo
Bar b = obj.bar
...
}
il WADL generato automaticamente che CXF produce produrrà solo le seguenti:
<resource path="/oneParam">
<method name="POST">
<request>
<representation mediaType="application/json"/>
</request>
<response>
<representation mediaType="application/json"/>
</response>
</method>
</resource>
Questo contiene alcuna informazione su ciò che la richiesta o la risposta in realtà contiene. Sergey sulla mailing list CXF diceva che era possibile collegare uno schema alla rappresentazione, ma come dovrei farlo? E come posso creare l'XSD?
(PS L'uso del POST per le risorse idempotenti potrebbe non essere RESTful, ma non è importante in questo caso poiché in pratica si utilizza RPC con Json. Questo è più o meno un clone 1: 1 di un'API basata su SOAP esistente.)
Lo schema è per aiutare gli sviluppatori a scoprire cosa viene inviato e restituito, non necessariamente per convalidare l'output di una macchina. Quindi questo vale per xml e non JSON non è così importante per me. – oligofren