RepreZen / KaiZen-OpenAPI-Editor

Eclipse Editor for the Swagger-OpenAPI Description Language
Eclipse Public License 1.0
115 stars 12 forks source link

[ZEN-4339] Implement optional 2nd phase of validation with KZOP #457

Closed ghillairet closed 6 years ago

ghillairet commented 6 years ago

This PR adds an advanced validation mode for OpenAPI 3 documents. The advanced validation is provided by KaiZen Parser (KZOP). The advanced validation is only performed when the advanced option is passed to the OpenAPi3Validator constructor (which it is now true by default).

This PR should not be merged until we update the target platform to include latest version of KZOP and JsonOverlay. Those are present in this PR but are added as jars in the openapi3 project lib folder.

ghillairet commented 6 years ago

I added a preference page for setting the advanced validation option for OpenAPI3.

screen shot 2018-08-16 at 10 23 40

Some examples of validation messages provided by KZOP:

screen shot 2018-08-16 at 15 35 22

Some of them are still missing position in document so they are placed on the first line:

screen shot 2018-08-16 at 15 35 17

tfesenko commented 6 years ago

Passed code review. @ghillairet , I also added a new p2 update site for KZOP and JOVL to our target platform. However, with these changes:

  1. I cannot launch KZOE from Eclipse because of a problem with Jackson:

    org.osgi.framework.BundleException: Could not resolve module: com.reprezen.swagedit.openapi3 [3982]
    Unresolved requirement: Require-Bundle: com.reprezen.kaizen.openapi-parser; bundle-version="3.0.1"
    -> Bundle-SymbolicName: com.reprezen.kaizen.openapi-parser; bundle-version="3.0.1.201808201424"
       com.reprezen.kaizen.openapi-parser [3979]
         Unresolved requirement: Import-Package: com.fasterxml.jackson.core; resolution="optional"
  2. We now have test failures in maven build in com.reprezen.swagedit.openapi3.tests.

Can you please have a look?

ghillairet commented 6 years ago

@tfesenko @andylowry It seems that the issue is with KZOP that declares the imported packages as optional. I made a local p2 repository for KZOP that removes the optional declaration in the p2/pom.xml file and now KZOE is working.

The problem I'm facing now is during validation with KZOP, I am having the javax.mail package not being found, although it is declared in the MANIFEST.

java.lang.NoClassDefFoundError: javax/mail/internet/AddressException
    at com.reprezen.kaizen.oasparser.ovl3.OpenApi3Impl.validate(OpenApi3Impl.java:58)
    at com.reprezen.kaizen.oasparser.OpenApiParser.parse(OpenApiParser.java:91)
    at com.reprezen.kaizen.oasparser.OpenApiParser.parse(OpenApiParser.java:71)
    at com.reprezen.kaizen.oasparser.OpenApi3Parser.parse(OpenApi3Parser.java:59)
    at com.reprezen.swagedit.openapi3.validation.OpenApi3Validator.validate(OpenApi3Validator.java:93)
    at com.reprezen.swagedit.core.validation.Validator.validate(Validator.java:75)
    at com.reprezen.swagedit.core.editor.ValidationOperation.validateSwagger(ValidationOperation.java:110)
    at com.reprezen.swagedit.core.editor.ValidationOperation.run(ValidationOperation.java:91)
    at com.reprezen.swagedit.core.editor.JsonEditor$6.doRunInWorkspace(JsonEditor.java:418)
    at com.reprezen.swagedit.core.editor.JsonEditor$SafeWorkspaceJob.runInWorkspace(JsonEditor.java:492)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException cannot be found by com.reprezen.kaizen.openapi-parser_2.2.0.20180821110849
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:432)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:345)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:337)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 12 more
ghillairet commented 6 years ago

@tfesenko @andylowry This PR https://github.com/RepreZen/KaiZen-OpenApi-Parser/pull/188 could fix the issue with import-packages not being resolved. It solves my previous issue with javax.mail package.

But I'm still having the tests to fail.

ghillairet commented 6 years ago

@tfesenko Ready to review and QA.

tfesenko commented 6 years ago

The recent commits passed code review. Local maven build succeeds. I am getting this error when launching from Eclipse.

java.lang.NoSuchMethodError: com.reprezen.kaizen.oasparser.val.ValidationResults.open()Lcom/reprezen/kaizen/oasparser/val/ValidationResults$ValidationResultsInstance;
    at com.reprezen.kaizen.oasparser.ovl3.OpenApi3Impl.validate(OpenApi3Impl.java:56)
    at com.reprezen.kaizen.oasparser.OpenApiParser.parse(OpenApiParser.java:91)
    at com.reprezen.kaizen.oasparser.OpenApiParser.parse(OpenApiParser.java:71)
    at com.reprezen.kaizen.oasparser.OpenApi3Parser.parse(OpenApi3Parser.java:59)
    at com.reprezen.swagedit.openapi3.validation.OpenApi3Validator.validate(OpenApi3Validator.java:98)
    at com.reprezen.swagedit.core.validation.Validator.validate(Validator.java:75)
    at com.reprezen.swagedit.core.editor.ValidationOperation.validateSwagger(ValidationOperation.java:110)
    at com.reprezen.swagedit.core.editor.ValidationOperation.run(ValidationOperation.java:91)
    at com.reprezen.swagedit.core.editor.JsonEditor$6.doRunInWorkspace(JsonEditor.java:419)
    at com.reprezen.swagedit.core.editor.JsonEditor$SafeWorkspaceJob.runInWorkspace(JsonEditor.java:493)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:39)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)
tfesenko commented 6 years ago

This strange exception is not present on KZOE installed from a local update site on top of a clean eclipse. Merging