Hi I logged a ticket https://issues.apache.org/jira/browse/CAMEL-9732
On Fri, Mar 18, 2016 at 12:55 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: > On Thu, Mar 10, 2016 at 1:26 AM, tomb50 <tom.bead...@gmail.com> wrote: >> Hi, >> >> I have encountered an issue relating to the Swagger component of Camel, I >> believe it is related to the RestModelConvertor that is used when creating >> the Swagger model from the Rest API model from Camel. >> >> When a model that is directly referenced (e.g. an out-type) is added to the >> Swagger.definitions map by that method, it is decorated with the extension >> of "x-className". Any models that are subsequently referenced from the >> original model are also added to the definitions map, undecorated. >> >> Definitions needs to be decorated as such in order to be returned later as >> ReferenceProperties in RestSwaggerReader.modelTypeAsRef(), otherwise they >> are returned as StringProperties. >> >> The issue seems to that there is nothing preventing a decorated element in >> the Swagger.definitions map from being overwritten by an undecorated version >> of the same class, if the REST API Verbs in Camel is ordered in a certain >> way. >> >> E.g. >> >> API 1 returns Model A, which references Model B. >> API 2 returns Model B. >> >> Case 1 (no issue): >> >> API 1 is loaded first. >> Model A is added to Swagger.definition map decorated with "x-className", >> Model B is added to the definition map undecorated. >> API 2 is then loaded. >> Model B is then decorated with "x-classname" and replaces the previous Model >> B element in the definition map. >> > > Yeah sounds better to keep existing. You are welcome to work on a PR > >> All good >> >> Case 2 (the issue): >> >> Consider that API 2 is loaded before API one, then after both API's are >> loaded the definitions map contains a Decorated Model A but an undecorated >> Model B. >> >> Then when the RestSwaggerReader tries to set the schema on the response >> element of API2 (towards the end of doParseVerbs()), it fails to find Model >> B as a reference Property and adds it as a StringProperty, so the Model does >> not show in Swagger UI and broke our validation tests. >> >> We have many existing APIs and Models, all working perfectly, and I came >> across this specific scenario today. I would appreciate If someone was able >> to verify if this indeed is a defect or I am mistaken in my understanding. >> >> If this is a bug, would a suitable fix to be to check the definition map for >> an existing Model and NOT replace it, if it is decorated with the >> "x-className" extension? Happy to get involved with a Pull request if >> required. >> >> Thanks >> Tom >> >> For ease: below is the code in question >> >> --------------------------------------------- >> RestSwaggerReader.class >> >> private void appendModels(Class clazz, Swagger swagger) { >> RestModelConverters converters = new RestModelConverters(); >> final Map<String, Model> models = converters.readClass(clazz); >> for (Map.Entry<String, Model> entry : models.entrySet()) { >> swagger.model(entry.getKey(), entry.getValue()); >> } >> } >> >> >> ----------------------------------------------------------- >> RestModelConverters.class >> >> public Map<String, Model> readClass(Class clazz) { >> String name = clazz.getName(); >> Map<String, Model> resolved = super.read(clazz); >> if (resolved != null) { >> for (Model model : resolved.values()) { >> // enrich with the class name of the model >> model.getVendorExtensions().put("x-className", new >> StringProperty(name)); >> } >> >> // read any extra using read-all >> Map<String, Model> extra = super.readAll(clazz); >> if (extra != null) { >> for (Map.Entry<String, Model> entry : extra.entrySet()) { >> if (!resolved.containsKey(entry.getKey())) { >> resolved.put(entry.getKey(), entry.getValue()); >> } >> } >> } >> } >> return resolved; >> } >> >> >> >> >> >> >> >> -- >> View this message in context: >> http://camel.465427.n5.nabble.com/Bug-in-RestSwaggerReader-appendModels-need-confirmation-tp5778821.html >> Sent from the Camel - Users mailing list archive at Nabble.com. > > > > -- > Claus Ibsen > ----------------- > http://davsclaus.com @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2 -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2