2016-11-29 2 views
0

Ich möchte mit Enunciate automatisch Dokumentation meiner REST-API generieren.Darf ich Java Interface als Datentypen verwenden?

Die JAX-RS kommentierten Code geht so etwas:

@POST 
@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML}) 
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML}) 
public IAuthentication login(CLogin aLogin) throws XException { 
    return this.pManager.authenticate(aLogin); 
} 

IAuthentication ist eine Schnittstelle, und es hat ein bleiben. Dies liegt daran, dass ich die Injektion verwende und den genauen Typ, der von der Methode authenticate() zurückgegeben wird, nicht vorhersagen kann. CLogin ist jedoch eine Klasse, und es ist in Ordnung, da es sich um eine Spezialisierung des Typs handelt, der authenticate() akzeptiert.

Jetzt ist mein Problem, dass nur Request Body Dokument in der von Enunciate generierten Dokumentation ist, und nicht der Antworttext. Enunciate scheint Java-Schnittstellen zu ignorieren, wenn für mögliche Datentypen, mit der folgenden Meldung suchen:

[DEBUG] [enunciate] com.example.IAuthentication ist kein Potential Jackson Art, weil es keine Klasse ist oder eine Enumeration .

Meine Schnittstellen sind mit JAXB-Annotationen versehen. Sie sind vom Quellpfad aus zugänglich.

Gibt es eine Möglichkeit zu erkennen, dass Java-Schnittstellen als Datentypen OK sind und berücksichtigt werden müssen.

Nachtrag

Ein Beispiel aus der Praxis der JSON Ausgabe dieser Methode:

{ 
    "token": "imec51lpb72lgsdrb0ftvfomt3", 
    "auth_key": "" 
} 
+0

Können Sie versuchen, die Klassen annotieren, die die Schnittstelle mit den Jaxb-Annotationen implementiert? – karelss

+0

tat ich. Eine Klasse '@XmlRootElement öffentliche Klasse CAuthentication implementiert IAuthentication' ist bereits vorhanden. Es wird in der Liste Datentyp angezeigt. Der Antworttext der Methode POST ist jedoch noch nicht dokumentiert. –

+0

Welche Implementierung von Jaxb benutzt du, vielleicht Jackson? – karelss

Antwort

0

Wie pro @stoicflame Antwort auf this issue, Version 2.7 von enunciate scheint nicht Java zu unterstützen Schnittstellen als Datentypen.

Ich verwendete das JavaDoc-Tag @returnWrapped. Eine andere Option wäre die Enumiate-spezifische Annotation @TypeHint. Das JavaDoc-Tag erspart mir jedoch externe Laufzeitabhängigkeiten.

Edit: Version 2.9.0 von Jetzt abgleichen supports documenting interface types.

Verwandte Themen