From bce261d095397795d844d25f8115300048d1ed01 Mon Sep 17 00:00:00 2001 From: Jueun Park <jueun-park98> Date: Wed, 1 Sep 2021 23:51:12 +0900 Subject: [PATCH] Update --- .../6.8/executionHistory/executionHistory.bin | Bin 5678547 -> 5678547 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/6.8/fileHashes/fileHashes.bin | Bin 764131 -> 764331 bytes .gradle/6.8/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .gradle/6.8/javaCompile/classAnalysis.bin | Bin 1195846 -> 1196345 bytes .gradle/6.8/javaCompile/javaCompile.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../st/openapi/HttpURLConnectionExample.class | Bin 0 -> 3235 bytes .../inf/st/openapi/OpenAPIMain.class | Bin 3109 -> 3109 bytes .../java/test/openapi/OpenAPIMain_test.class | Bin 4979 -> 4979 bytes .../classes/openapi.OpenAPIMain_test.html | 6 +- build/reports/tests/test/index.html | 8 +- .../reports/tests/test/packages/openapi.html | 6 +- build/resources/main/petstore-v2.yaml | 738 ++++++++++++++++++ .../test/TEST-openapi.OpenAPIMain_test.xml | 4 +- build/test-results/test/binary/results.bin | Bin 81 -> 82 bytes pom.xml | 6 + .../st/openapi/HttpURLConnectionExample.java | 81 ++ .../tudresden/inf/st/openapi/OpenAPIMain.java | 2 + src/main/resources/petstore-v2.yaml | 738 ++++++++++++++++++ 20 files changed, 1577 insertions(+), 12 deletions(-) create mode 100644 build/classes/java/main/de/tudresden/inf/st/openapi/HttpURLConnectionExample.class create mode 100644 build/resources/main/petstore-v2.yaml create mode 100644 src/main/java/de/tudresden/inf/st/openapi/HttpURLConnectionExample.java create mode 100644 src/main/resources/petstore-v2.yaml diff --git a/.gradle/6.8/executionHistory/executionHistory.bin b/.gradle/6.8/executionHistory/executionHistory.bin index 2b1750df8a906f384bac3c1fb159b021be4aaeb1..58c56719e69feaa017c2064de75d24c833bd55e2 100644 GIT binary patch delta 5943 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 delta 5699 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 F002bhBkTYG diff --git a/.gradle/6.8/executionHistory/executionHistory.lock b/.gradle/6.8/executionHistory/executionHistory.lock index adf98ccd5eefe6617ce22f81a8d9f8a0fe002364..62dfc85bc4b89872cb2ad3e1aefa24693522d8a8 100644 GIT binary patch literal 17 VcmZQp+O{L7ZHdZl1~B0H4FEJ81uy^r literal 17 VcmZQp+O{L7ZHdZl1~A~c1pqVq1rGoK diff --git a/.gradle/6.8/fileHashes/fileHashes.bin b/.gradle/6.8/fileHashes/fileHashes.bin index 7627d32a8fcdbf45ec7f7debb787d6acca704950..9f57622cbb1b697da871e95db7550246ecbf3a49 100644 GIT binary patch delta 4661 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 X3+J&3t6)`hiW%C}_ts-zV9)~qK3`O4 delta 4389 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 diff --git a/.gradle/6.8/fileHashes/fileHashes.lock b/.gradle/6.8/fileHashes/fileHashes.lock index d3eec9ad5c561fc0e7be5935ac780bf539cd8b22..35fd05debb4ecdeaaeff59014933f889ad7461f5 100644 GIT binary patch literal 17 WcmZP;t>XHyYn^sA0|+pFWdQ&!ngo>q literal 17 WcmZP;t>XHyYn^sA0|+p_T?_y&DFrM5 diff --git a/.gradle/6.8/javaCompile/classAnalysis.bin b/.gradle/6.8/javaCompile/classAnalysis.bin index 62ef4e3ad5de2b867f612afe495c7f08db9eb6e5..c6b7537a9c2b40e457579d1cb996ec4fe7e081f4 100644 GIT binary patch delta 104 zcmX^1&tqqkXG05P3sVbo3rh=Y3tJ0&3r7oQ3s(zw3(po_*I$hK+ueTg-sI%(c@kH# z!}bCL2ngA`Z5LzV>lR|H+^9H1czQx3FH3uv7GHaq7Jqw~mOy)$mf-d<Eujx0+Y_vX HJ~ILUTm2$Y delta 86 zcmdnl<az9$M?(u^3sVbo3rh=Y3tJ0&3r7oQ3s(zw3(po_*I$f!+ueTg-sGGtXIZg* rJqsU~5M$y-#SOyK6B>D0+QYQ?+QYQ?+rzX3+QYO2w})v7eGmZvDhwRK diff --git a/.gradle/6.8/javaCompile/javaCompile.lock b/.gradle/6.8/javaCompile/javaCompile.lock index c304b9ac7c9960e869501e18bc24b8197e700e65..86eafb0daf0c66271f2ef0815673cc0b4ff1e76c 100644 GIT binary patch literal 17 UcmZS9_jn)L_pnKx0SpB40WaJHP5=M^ literal 17 UcmZS9_jn)L_pnKx0Sp9u057=&D*ylh diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index c57f4cdfb03a44607efd70d7e772d9d4b84e777c..32df1e0d0b372ba2045dd4f4044f9b0a6c0ac778 100644 GIT binary patch literal 17 UcmZRMRkTpz>bjrL00zQN03bL66951J literal 17 UcmZRMRkTpz>bjrL00zQ503ZSa-2eap diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/HttpURLConnectionExample.class b/build/classes/java/main/de/tudresden/inf/st/openapi/HttpURLConnectionExample.class new file mode 100644 index 0000000000000000000000000000000000000000..8b5a6bab51ac3826f49a716f9998d3edd65ac783 GIT binary patch literal 3235 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 If-`*_0AYOxVE_OC literal 0 HcmV?d00001 diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/OpenAPIMain.class b/build/classes/java/main/de/tudresden/inf/st/openapi/OpenAPIMain.class index 935127c238b8964ca08444c965ddc6e250a779ac..7639704adf63f312b64b0adf72af6678cc78d7ac 100644 GIT binary patch delta 21 dcmZ1~u~cG11~;cO!&wFwhD!|YlMA`G002tl2G;-p delta 21 dcmZ1~u~cG11~;c8!&wF=hD!{tlMA`G002s^2GIZj diff --git a/build/classes/java/test/openapi/OpenAPIMain_test.class b/build/classes/java/test/openapi/OpenAPIMain_test.class index fcf5409409bd4bf1659df1fc43a1435f4c278ae0..29ffda4416639b46e049b00d3c4e21e888615e05 100644 GIT binary patch delta 21 ccmeyY_E~MiUm?yMhGvF5hII@Dli7rG0b!d5j{pDw delta 21 ccmeyY_E~MiUm?yshGvEWhII@@li7rG0b$Vxl>h($ diff --git a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html index 105d4c43..76ceafc0 100644 --- a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html +++ b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html @@ -41,7 +41,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">11.669s</div> +<div class="counter">21.339s</div> <p>duration</p> </div> </td> @@ -79,7 +79,7 @@ </thead> <tr> <td class="success">test()</td> -<td class="success">11.669s</td> +<td class="success">21.339s</td> <td class="success">passed</td> </tr> </table> @@ -199,7 +199,7 @@ Loading expression DSL file 'uspto.json'. <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 29. 오전 2:06:22</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 31. 오후 3:42:40</p> </div> </div> </body> diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html index a7423a54..6e5070e8 100644 --- a/build/reports/tests/test/index.html +++ b/build/reports/tests/test/index.html @@ -38,7 +38,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">11.669s</div> +<div class="counter">21.339s</div> <p>duration</p> </div> </td> @@ -85,7 +85,7 @@ <td>1</td> <td>0</td> <td>0</td> -<td>11.669s</td> +<td>21.339s</td> <td class="success">100%</td> </tr> </tbody> @@ -112,7 +112,7 @@ <td>1</td> <td>0</td> <td>0</td> -<td>11.669s</td> +<td>21.339s</td> <td class="success">100%</td> </tr> </tbody> @@ -126,7 +126,7 @@ <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 29. 오전 2:06:22</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 31. 오후 3:42:40</p> </div> </div> </body> diff --git a/build/reports/tests/test/packages/openapi.html b/build/reports/tests/test/packages/openapi.html index e83a32ec..de5f9987 100644 --- a/build/reports/tests/test/packages/openapi.html +++ b/build/reports/tests/test/packages/openapi.html @@ -40,7 +40,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">11.669s</div> +<div class="counter">21.339s</div> <p>duration</p> </div> </td> @@ -83,7 +83,7 @@ <td>1</td> <td>0</td> <td>0</td> -<td>11.669s</td> +<td>21.339s</td> <td class="success">100%</td> </tr> </table> @@ -96,7 +96,7 @@ <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 29. 오전 2:06:22</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 31. 오후 3:42:40</p> </div> </div> </body> diff --git a/build/resources/main/petstore-v2.yaml b/build/resources/main/petstore-v2.yaml new file mode 100644 index 00000000..9184e9c8 --- /dev/null +++ b/build/resources/main/petstore-v2.yaml @@ -0,0 +1,738 @@ +openapi: 3.0.0 +servers: + - url: 'http://petstore.swagger.io/v2' +info: + description: >- + This is a sample server Petstore server. For this sample, you can use the api key + `special-key` to test the authorization filters. + version: 1.0.0 + title: OpenAPI Petstore + license: + name: Apache-2.0 + url: 'https://www.apache.org/licenses/LICENSE-2.0.html' +tags: + - name: pet + description: Everything about your Pets + - name: store + description: Access to Petstore orders + - name: user + description: Operations about user +paths: + /pet: + post: + tags: + - pet + summary: Add a new pet to the store + description: '' + operationId: addPet + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + '405': + description: Invalid input + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + $ref: '#/components/requestBodies/Pet' + put: + tags: + - pet + summary: Update an existing pet + description: '' + operationId: updatePet + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid ID supplied + '404': + description: Pet not found + '405': + description: Validation exception + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + $ref: '#/components/requestBodies/Pet' + /pet/findByStatus: + get: + tags: + - pet + summary: Finds Pets by status + description: Multiple status values can be provided with comma separated strings + operationId: findPetsByStatus + parameters: + - name: status + in: query + description: Status values that need to be considered for filter + required: true + style: form + explode: false + deprecated: true + schema: + type: array + items: + type: string + enum: + - available + - pending + - sold + default: available + responses: + '200': + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid status value + security: + - petstore_auth: + - 'read:pets' + /pet/findByTags: + get: + tags: + - pet + summary: Finds Pets by tags + description: >- + Multiple tags can be provided with comma separated strings. Use tag1, + tag2, tag3 for testing. + operationId: findPetsByTags + parameters: + - name: tags + in: query + description: Tags to filter by + required: true + style: form + explode: false + schema: + type: array + items: + type: string + responses: + '200': + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid tag value + security: + - petstore_auth: + - 'read:pets' + deprecated: true + '/pet/{petId}': + get: + tags: + - pet + summary: Find pet by ID + description: Returns a single pet + operationId: getPetById + parameters: + - name: petId + in: path + description: ID of pet to return + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid ID supplied + '404': + description: Pet not found + security: + - api_key: [] + post: + tags: + - pet + summary: Updates a pet in the store with form data + description: '' + operationId: updatePetWithForm + parameters: + - name: petId + in: path + description: ID of pet that needs to be updated + required: true + schema: + type: integer + format: int64 + responses: + '405': + description: Invalid input + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + name: + description: Updated name of the pet + type: string + status: + description: Updated status of the pet + type: string + delete: + tags: + - pet + summary: Deletes a pet + description: '' + operationId: deletePet + parameters: + - name: api_key + in: header + required: false + schema: + type: string + - name: petId + in: path + description: Pet id to delete + required: true + schema: + type: integer + format: int64 + responses: + '400': + description: Invalid pet value + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + '/pet/{petId}/uploadImage': + post: + tags: + - pet + summary: uploads an image + description: '' + operationId: uploadFile + parameters: + - name: petId + in: path + description: ID of pet to update + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + additionalMetadata: + description: Additional data to pass to server + type: string + file: + description: file to upload + type: string + format: binary + /store/inventory: + get: + tags: + - store + summary: Returns pet inventories by status + description: Returns a map of status codes to quantities + operationId: getInventory + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + additionalProperties: + type: integer + format: int32 + security: + - api_key: [] + /store/order: + post: + tags: + - store + summary: Place an order for a pet + description: '' + operationId: placeOrder + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + '400': + description: Invalid Order + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + description: order placed for purchasing the pet + required: true + '/store/order/{orderId}': + get: + tags: + - store + summary: Find purchase order by ID + description: >- + For valid response try integer IDs with value <= 5 or > 10. Other values + will generated exceptions + operationId: getOrderById + parameters: + - name: orderId + in: path + description: ID of pet that needs to be fetched + required: true + schema: + type: integer + format: int64 + minimum: 1 + maximum: 5 + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + '400': + description: Invalid ID supplied + '404': + description: Order not found + delete: + tags: + - store + summary: Delete purchase order by ID + description: >- + For valid response try integer IDs with value < 1000. Anything above + 1000 or nonintegers will generate API errors + operationId: deleteOrder + parameters: + - name: orderId + in: path + description: ID of the order that needs to be deleted + required: true + schema: + type: string + responses: + '400': + description: Invalid ID supplied + '404': + description: Order not found + /user: + post: + tags: + - user + summary: Create user + description: This can only be done by the logged in user. + operationId: createUser + responses: + default: + description: successful operation + security: + - api_key: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Created user object + required: true + /user/createWithArray: + post: + tags: + - user + summary: Creates list of users with given input array + description: '' + operationId: createUsersWithArrayInput + responses: + default: + description: successful operation + security: + - api_key: [] + requestBody: + $ref: '#/components/requestBodies/UserArray' + /user/createWithList: + post: + tags: + - user + summary: Creates list of users with given input array + description: '' + operationId: createUsersWithListInput + responses: + default: + description: successful operation + security: + - api_key: [] + requestBody: + $ref: '#/components/requestBodies/UserArray' + /user/login: + get: + tags: + - user + summary: Logs user into the system + description: '' + operationId: loginUser + parameters: + - name: username + in: query + description: The user name for login + required: true + schema: + type: string + pattern: '^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$' + - name: password + in: query + description: The password for login in clear text + required: true + schema: + type: string + responses: + '200': + description: successful operation + headers: + Set-Cookie: + description: >- + Cookie authentication key for use with the `api_key` + apiKey authentication. + schema: + type: string + example: AUTH_KEY=abcde12345; Path=/; HttpOnly + X-Rate-Limit: + description: calls per hour allowed by the user + schema: + type: integer + format: int32 + X-Expires-After: + description: date in UTC when token expires + schema: + type: string + format: date-time + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + '400': + description: Invalid username/password supplied + /user/logout: + get: + tags: + - user + summary: Logs out current logged in user session + description: '' + operationId: logoutUser + responses: + default: + description: successful operation + security: + - api_key: [] + '/user/{username}': + get: + tags: + - user + summary: Get user by user name + description: '' + operationId: getUserByName + parameters: + - name: username + in: path + description: The name that needs to be fetched. Use user1 for testing. + required: true + schema: + type: string + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + '400': + description: Invalid username supplied + '404': + description: User not found + put: + tags: + - user + summary: Updated user + description: This can only be done by the logged in user. + operationId: updateUser + parameters: + - name: username + in: path + description: name that need to be deleted + required: true + schema: + type: string + responses: + '400': + description: Invalid user supplied + '404': + description: User not found + security: + - api_key: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Updated user object + required: true + delete: + tags: + - user + summary: Delete user + description: This can only be done by the logged in user. + operationId: deleteUser + parameters: + - name: username + in: path + description: The name that needs to be deleted + required: true + schema: + type: string + responses: + '400': + description: Invalid username supplied + '404': + description: User not found + security: + - api_key: [] +externalDocs: + description: Find out more about Swagger + url: 'http://swagger.io' +components: + requestBodies: + UserArray: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + description: List of user object + required: true + Pet: + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + description: Pet object that needs to be added to the store + required: true + securitySchemes: + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog' + scopes: + 'write:pets': modify pets in your account + 'read:pets': read your pets + api_key: + type: apiKey + name: api_key + in: header + schemas: + Order: + title: Pet Order + description: An order for a pets from the pet store + type: object + properties: + id: + type: integer + format: int64 + petId: + type: integer + format: int64 + quantity: + type: integer + format: int32 + shipDate: + type: string + format: date-time + status: + type: string + description: Order Status + enum: + - placed + - approved + - delivered + complete: + type: boolean + default: false + xml: + name: Order + Category: + title: Pet category + description: A category for a pet + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + pattern: '^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$' + xml: + name: Category + User: + title: a User + description: A User who is purchasing from the pet store + type: object + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + type: integer + format: int32 + description: User Status + xml: + name: User + Tag: + title: Pet Tag + description: A tag for a pet + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Tag + Pet: + title: a Pet + description: A pet for sale in the pet store + type: object + required: + - name + - photoUrls + properties: + id: + type: integer + format: int64 + category: + $ref: '#/components/schemas/Category' + name: + type: string + example: doggie + photoUrls: + type: array + xml: + name: photoUrl + wrapped: true + items: + type: string + tags: + type: array + xml: + name: tag + wrapped: true + items: + $ref: '#/components/schemas/Tag' + status: + type: string + description: pet status in the store + deprecated: true + enum: + - available + - pending + - sold + xml: + name: Pet + ApiResponse: + title: An uploaded response + description: Describes the result of uploading an image resource + type: object + properties: + code: + type: integer + format: int32 + type: + type: string + message: + type: string diff --git a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml index b274e3c0..03b9f211 100644 --- a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml +++ b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="0" errors="0" timestamp="2021-08-28T17:06:10" hostname="DESKTOP-RAH69DT" time="11.669"> +<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="0" errors="0" timestamp="2021-08-31T06:42:18" hostname="DESKTOP-RAH69DT" time="21.339"> <properties/> - <testcase name="test()" classname="openapi.OpenAPIMain_test" time="11.669"/> + <testcase name="test()" classname="openapi.OpenAPIMain_test" time="21.339"/> <system-out><![CDATA[100 Loading expression DSL file '1password.com-events-1.0.0.json'. Loading expression DSL file '1password.local-connect-1.3.0.json'. diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin index 1c65921d243caf39db375d7f986fd5487250d727..d16a5ed5807fe1b8415f089399f781b5c4eac081 100644 GIT binary patch delta 38 pcmWFxnqa6n>*MaljEwCisl_E4nox@2_A*8W2FB`HpZNYU0016C4mSV* delta 37 ncmWFvoM5QXyYnIgBV&6>YH^8%CX`~B8qL7KSlzqx-&6(w^@a@- diff --git a/pom.xml b/pom.xml index eadf2979..0052e677 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,12 @@ <artifactId>jackson-dataformat-yaml</artifactId> <version>2.1.2</version> </dependency> + <dependency> + <groupId>org.openapi4j</groupId> + <artifactId>openapi-operation-validator</artifactId> + <version>1.0.7</version> + <scope>compile</scope> + </dependency> </dependencies> <properties> <maven.compiler.source>1.8</maven.compiler.source> diff --git a/src/main/java/de/tudresden/inf/st/openapi/HttpURLConnectionExample.java b/src/main/java/de/tudresden/inf/st/openapi/HttpURLConnectionExample.java new file mode 100644 index 00000000..742084b7 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/openapi/HttpURLConnectionExample.java @@ -0,0 +1,81 @@ +package de.tudresden.inf.st.openapi; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +import javax.net.ssl.HttpsURLConnection; + +public class HttpURLConnectionExample { + + private final String USER_AGENT = "Mozilla/5.0"; + + public static void main(String[] args) throws Exception { + + HttpURLConnectionExample http = new HttpURLConnectionExample(); + + System.out.println("Data call with GET"); + http.sendGet("https://www.naver.com"); + + System.out.println("Data call with POST"); + String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345"; + http.sendPost("https://www.google.co.kr/", urlParameters); + } + + // HTTP GET request + private void sendGet(String targetUrl) throws Exception { + + URL url = new URL(targetUrl); + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + + con.setRequestMethod("GET"); // optional default is GET + con.setRequestProperty("User-Agent", USER_AGENT); // add request header + + int responseCode = con.getResponseCode(); + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + // print result + System.out.println("HTTP status code : " + responseCode); + //System.out.println("HTTP body : " + response.toString()); + } + + // HTTP POST request + private void sendPost(String targetUrl, String parameters) throws Exception { + + URL url = new URL(targetUrl); + HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); + + con.setRequestMethod("POST"); // HTTP POST + con.setRequestProperty("User-Agent", USER_AGENT); + con.setDoOutput(true); // POST + // Send post request + DataOutputStream wr = new DataOutputStream(con.getOutputStream()); + wr.writeBytes(parameters); + wr.flush(); + wr.close(); + + int responseCode = con.getResponseCode(); + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + // print result + System.out.println("HTTP status code : " + responseCode); + //System.out.println("HTTP body : " + response.toString()); + + } +} \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java index 95114e34..91eeecb7 100644 --- a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java +++ b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java @@ -62,6 +62,8 @@ public class OpenAPIMain { //writer.write(api3.toNode().toPrettyString()); //writer.close(); + + if (args.length > 0) { fileName = args[0]; } diff --git a/src/main/resources/petstore-v2.yaml b/src/main/resources/petstore-v2.yaml new file mode 100644 index 00000000..9184e9c8 --- /dev/null +++ b/src/main/resources/petstore-v2.yaml @@ -0,0 +1,738 @@ +openapi: 3.0.0 +servers: + - url: 'http://petstore.swagger.io/v2' +info: + description: >- + This is a sample server Petstore server. For this sample, you can use the api key + `special-key` to test the authorization filters. + version: 1.0.0 + title: OpenAPI Petstore + license: + name: Apache-2.0 + url: 'https://www.apache.org/licenses/LICENSE-2.0.html' +tags: + - name: pet + description: Everything about your Pets + - name: store + description: Access to Petstore orders + - name: user + description: Operations about user +paths: + /pet: + post: + tags: + - pet + summary: Add a new pet to the store + description: '' + operationId: addPet + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + '405': + description: Invalid input + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + $ref: '#/components/requestBodies/Pet' + put: + tags: + - pet + summary: Update an existing pet + description: '' + operationId: updatePet + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid ID supplied + '404': + description: Pet not found + '405': + description: Validation exception + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + $ref: '#/components/requestBodies/Pet' + /pet/findByStatus: + get: + tags: + - pet + summary: Finds Pets by status + description: Multiple status values can be provided with comma separated strings + operationId: findPetsByStatus + parameters: + - name: status + in: query + description: Status values that need to be considered for filter + required: true + style: form + explode: false + deprecated: true + schema: + type: array + items: + type: string + enum: + - available + - pending + - sold + default: available + responses: + '200': + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid status value + security: + - petstore_auth: + - 'read:pets' + /pet/findByTags: + get: + tags: + - pet + summary: Finds Pets by tags + description: >- + Multiple tags can be provided with comma separated strings. Use tag1, + tag2, tag3 for testing. + operationId: findPetsByTags + parameters: + - name: tags + in: query + description: Tags to filter by + required: true + style: form + explode: false + schema: + type: array + items: + type: string + responses: + '200': + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid tag value + security: + - petstore_auth: + - 'read:pets' + deprecated: true + '/pet/{petId}': + get: + tags: + - pet + summary: Find pet by ID + description: Returns a single pet + operationId: getPetById + parameters: + - name: petId + in: path + description: ID of pet to return + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid ID supplied + '404': + description: Pet not found + security: + - api_key: [] + post: + tags: + - pet + summary: Updates a pet in the store with form data + description: '' + operationId: updatePetWithForm + parameters: + - name: petId + in: path + description: ID of pet that needs to be updated + required: true + schema: + type: integer + format: int64 + responses: + '405': + description: Invalid input + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + name: + description: Updated name of the pet + type: string + status: + description: Updated status of the pet + type: string + delete: + tags: + - pet + summary: Deletes a pet + description: '' + operationId: deletePet + parameters: + - name: api_key + in: header + required: false + schema: + type: string + - name: petId + in: path + description: Pet id to delete + required: true + schema: + type: integer + format: int64 + responses: + '400': + description: Invalid pet value + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + '/pet/{petId}/uploadImage': + post: + tags: + - pet + summary: uploads an image + description: '' + operationId: uploadFile + parameters: + - name: petId + in: path + description: ID of pet to update + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + security: + - petstore_auth: + - 'write:pets' + - 'read:pets' + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + additionalMetadata: + description: Additional data to pass to server + type: string + file: + description: file to upload + type: string + format: binary + /store/inventory: + get: + tags: + - store + summary: Returns pet inventories by status + description: Returns a map of status codes to quantities + operationId: getInventory + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + additionalProperties: + type: integer + format: int32 + security: + - api_key: [] + /store/order: + post: + tags: + - store + summary: Place an order for a pet + description: '' + operationId: placeOrder + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + '400': + description: Invalid Order + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + description: order placed for purchasing the pet + required: true + '/store/order/{orderId}': + get: + tags: + - store + summary: Find purchase order by ID + description: >- + For valid response try integer IDs with value <= 5 or > 10. Other values + will generated exceptions + operationId: getOrderById + parameters: + - name: orderId + in: path + description: ID of pet that needs to be fetched + required: true + schema: + type: integer + format: int64 + minimum: 1 + maximum: 5 + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + '400': + description: Invalid ID supplied + '404': + description: Order not found + delete: + tags: + - store + summary: Delete purchase order by ID + description: >- + For valid response try integer IDs with value < 1000. Anything above + 1000 or nonintegers will generate API errors + operationId: deleteOrder + parameters: + - name: orderId + in: path + description: ID of the order that needs to be deleted + required: true + schema: + type: string + responses: + '400': + description: Invalid ID supplied + '404': + description: Order not found + /user: + post: + tags: + - user + summary: Create user + description: This can only be done by the logged in user. + operationId: createUser + responses: + default: + description: successful operation + security: + - api_key: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Created user object + required: true + /user/createWithArray: + post: + tags: + - user + summary: Creates list of users with given input array + description: '' + operationId: createUsersWithArrayInput + responses: + default: + description: successful operation + security: + - api_key: [] + requestBody: + $ref: '#/components/requestBodies/UserArray' + /user/createWithList: + post: + tags: + - user + summary: Creates list of users with given input array + description: '' + operationId: createUsersWithListInput + responses: + default: + description: successful operation + security: + - api_key: [] + requestBody: + $ref: '#/components/requestBodies/UserArray' + /user/login: + get: + tags: + - user + summary: Logs user into the system + description: '' + operationId: loginUser + parameters: + - name: username + in: query + description: The user name for login + required: true + schema: + type: string + pattern: '^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$' + - name: password + in: query + description: The password for login in clear text + required: true + schema: + type: string + responses: + '200': + description: successful operation + headers: + Set-Cookie: + description: >- + Cookie authentication key for use with the `api_key` + apiKey authentication. + schema: + type: string + example: AUTH_KEY=abcde12345; Path=/; HttpOnly + X-Rate-Limit: + description: calls per hour allowed by the user + schema: + type: integer + format: int32 + X-Expires-After: + description: date in UTC when token expires + schema: + type: string + format: date-time + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + '400': + description: Invalid username/password supplied + /user/logout: + get: + tags: + - user + summary: Logs out current logged in user session + description: '' + operationId: logoutUser + responses: + default: + description: successful operation + security: + - api_key: [] + '/user/{username}': + get: + tags: + - user + summary: Get user by user name + description: '' + operationId: getUserByName + parameters: + - name: username + in: path + description: The name that needs to be fetched. Use user1 for testing. + required: true + schema: + type: string + responses: + '200': + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + '400': + description: Invalid username supplied + '404': + description: User not found + put: + tags: + - user + summary: Updated user + description: This can only be done by the logged in user. + operationId: updateUser + parameters: + - name: username + in: path + description: name that need to be deleted + required: true + schema: + type: string + responses: + '400': + description: Invalid user supplied + '404': + description: User not found + security: + - api_key: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Updated user object + required: true + delete: + tags: + - user + summary: Delete user + description: This can only be done by the logged in user. + operationId: deleteUser + parameters: + - name: username + in: path + description: The name that needs to be deleted + required: true + schema: + type: string + responses: + '400': + description: Invalid username supplied + '404': + description: User not found + security: + - api_key: [] +externalDocs: + description: Find out more about Swagger + url: 'http://swagger.io' +components: + requestBodies: + UserArray: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + description: List of user object + required: true + Pet: + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + description: Pet object that needs to be added to the store + required: true + securitySchemes: + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog' + scopes: + 'write:pets': modify pets in your account + 'read:pets': read your pets + api_key: + type: apiKey + name: api_key + in: header + schemas: + Order: + title: Pet Order + description: An order for a pets from the pet store + type: object + properties: + id: + type: integer + format: int64 + petId: + type: integer + format: int64 + quantity: + type: integer + format: int32 + shipDate: + type: string + format: date-time + status: + type: string + description: Order Status + enum: + - placed + - approved + - delivered + complete: + type: boolean + default: false + xml: + name: Order + Category: + title: Pet category + description: A category for a pet + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + pattern: '^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$' + xml: + name: Category + User: + title: a User + description: A User who is purchasing from the pet store + type: object + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + type: integer + format: int32 + description: User Status + xml: + name: User + Tag: + title: Pet Tag + description: A tag for a pet + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Tag + Pet: + title: a Pet + description: A pet for sale in the pet store + type: object + required: + - name + - photoUrls + properties: + id: + type: integer + format: int64 + category: + $ref: '#/components/schemas/Category' + name: + type: string + example: doggie + photoUrls: + type: array + xml: + name: photoUrl + wrapped: true + items: + type: string + tags: + type: array + xml: + name: tag + wrapped: true + items: + $ref: '#/components/schemas/Tag' + status: + type: string + description: pet status in the store + deprecated: true + enum: + - available + - pending + - sold + xml: + name: Pet + ApiResponse: + title: An uploaded response + description: Describes the result of uploading an image resource + type: object + properties: + code: + type: integer + format: int32 + type: + type: string + message: + type: string -- GitLab