Skip to end of banner
Go to start of banner

Spike: Figure out how to plug JSON schema in from external library (jar file) into a module

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Description:

There is a need to use external JSON schema(s) to describe data in RAML API interfaces. 
The schema is expected to reside inside a jar file which attached to a module as a regular dependency.
If the above is not achievable – propose any options of how external schemas can be used in a module with minimal effort

Input values:

assume existing RAML directory structure:

\ramls
-\examples
-\raml-util
-library.raml
-nataliabook.json
-bookCollection.json

where bookCollection.json file contains a reference to the single item 

as following:

  "$ref": "nataliaBook.json"

Results:

    1. Include JSON schemas as a dependency to the module using maven plugins

Approach:

  • add a dependency to the target module
  • include following plugins to the .pom file
    •  Add a plugin to unpack RAML and JSON files 

      This plugin unpack the files of particular dependency

      <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>3.1.0</version>
              <executions>
                <execution>
                  <id>unpack</id>
                  <phase>prepare-package</phase>
                  <goals>
                    <goal>unpack</goal>
                  </goals>
                  <configuration>
                    <artifactItems>
                      <artifactItem>
                        <groupId>org.folio</groupId>
                        <artifactId>mod-data-upload</artifactId>
                        <outputDirectory>${ramlfiles_path}</outputDirectory>
                        <overWrite>true</overWrite>
                        <includes>ramls/</includes>
                        <excludes>ramls/raml-util/, ramls/*.list</excludes>
                      </artifactItem>
                    </artifactItems>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>true</overWriteSnapshots>
                  </configuration>
                </execution>
              </executions>
            </plugin>
    •  clean up the folder

      the following property seems not working for the maven-dependency-plugin

      <overWrite>true</overWrite>

      this means that every time you need to build the project you have to remove the folder manually.

      To simply this process add the maven-clean-plugin to do it automatically by specifying the folder

      <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.1.0</version>
              <configuration>
                <filesets>
                  <fileset>
                    <directory>ramls/ramls</directory>
                    <followSymlinks>false</followSymlinks>
                  </fileset>
                </filesets>
              </configuration>
            </plugin>
    •  and finally, add the ant-run plugin

      After the module builds, all references to files will point to exact files in the current system:

      which is not convenient to use in case of the different build environments.

      The following plugin task will replace found lines, specifying the path to file and cut it to leave only the file name.

      <plugin>
              <artifactId>maven-antrun-plugin</artifactId>
              <version>1.8</version>
              <executions>
                <execution>
                  <phase>prepare-package</phase>
                  <goals>
                    <goal>run</goal>
                  </goals>
                  <configuration>
                    <tasks>
                      <replaceregexp match="(file:.*[/])" replace="" byline="true">
                        <fileset dir="${ramlfiles_path}/ramls" includes="**/*.json" />
                      </replaceregexp>
                    </tasks>
                  </configuration>
                </execution>
              </executions>
            </plugin>

Advantages: 

  • No need to modify RMB module 

Disadvantages:

  • Insert a bunch of plugins to every module needed
  • maintain regex in case of change

      2. Add plugin to RMB to manage references 

Approach:

  • From the jsonschema2pojo Wiki documentation there is possible to specify the path to the referenced object by classpath:, resource: 

      3. Add schemas to RAML module 

Approach:

  • No labels