') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Fix UUID support by ackintosh · Pull Request #1746 · OpenAPITools/openapi-generator · GitHub
Skip to content

Fix UUID support - #1746

Merged
ackintosh merged 2 commits into
OpenAPITools:masterfrom
ackintosh:fix-uuid-serialization
Dec 26, 2018
Merged

Fix UUID support#1746
ackintosh merged 2 commits into
OpenAPITools:masterfrom
ackintosh:fix-uuid-serialization

Conversation

@ackintosh

@ackintoshackintosh commented Dec 23, 2018

Copy link
Copy Markdown
Contributor

PR checklist

  • Read the contribution guidelines.
  • Ran the shell script under ./bin/ to update Petstore sample so that CIs can verify the change. (For instance, only need to run ./bin/{LANG}-petstore.sh and ./bin/security/{LANG}-petstore.sh if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in .\bin\windows\.
  • Filed the PR against the correct branch: master, 3.4.x, 4.0.x. Default: master.
  • Copied the technical committee to review the pull request if your PR is targeting a particular programming language.

Description of the PR

This PR fixes#1733


Sample spec

Sample spec
openapi: 3.0.0info:
description: >- This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: " \version: 1.0.0title: OpenAPI Petstorelicense:
name: Apache-2.0url: 'http://www.apache.org/licenses/LICENSE-2.0.html'paths:
/foo:
get:
parameters:
- $ref: '#/components/parameters/TestQuery'responses:
default:
description: responsecontent:
application/json:
schema:
$ref: '#/components/schemas/Foo'servers:
- url: http://localhost:8080/description: The local servercomponents:
parameters:
TestQuery:
name: testQuerydescription: test queryin: queryschema:
$ref: '#/components/schemas/Bar'schemas:
Foo:
type: objectproperties:
bar:
$ref: '#/components/schemas/Bar'Bar:
type: stringformat: uuid

Sample code using a generated codes from the spec

funmain(args:Array<String>) {
val api =DefaultApi()
println(api.fooGet(UUID.randomUUID()))
}

Before

Exception in thread "main" java.lang.IllegalArgumentException: Platform class java.util.UUID annotated [] requires explicit JsonAdapter to be registered
at com.squareup.moshi.ClassJsonAdapter$1.create(ClassJsonAdapter.java:51)
at com.squareup.moshi.Moshi.adapter(Moshi.java:100)
at com.squareup.moshi.KotlinJsonAdapterFactory.create(KotlinJsonAdapter.kt:184)
at com.squareup.moshi.Moshi.adapter(Moshi.java:100)
at com.squareup.moshi.Moshi.adapter(Moshi.java:62)
at org.openapitools.client.apis.DefaultApi.fooGet(DefaultApi.kt:173)
at org.openapitools.client.MainKt.main(Main.kt:8)

After

Foo(bar=ce5b8513-fd5b-4b25-98e2-c40dc1b3c7c4)

@ackintosh
ackintoshforce-pushed the fix-uuid-serialization branch from 52f5821 to 3a2e0d2CompareDecember 23, 2018 14:05
./bin/kotlin-client-threetenbp.sh
./bin/kotlin-client-string.sh
./bin/kotlin-client-petstore.sh
@wing328wing328 added this to the 4.0.0 milestone Dec 23, 2018
@wing328

Copy link
Copy Markdown
Member

cc @jimschubert (2017/09) @dr4ke616 (2018/08)

@jimschubertjimschubert left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good. I haven't run any tests on it, but I don't see any issues with implementation.

@ackintosh
ackintosh merged commit 5d98fc6 into OpenAPITools:masterDec 26, 2018
@ackintosh
ackintosh deleted the fix-uuid-serialization branch December 27, 2018 00:00
jimschubert added a commit to jimschubert/openapi-generator that referenced this pull request Dec 31, 2018
* master: (26 commits)
Delete unused method (OpenAPITools#1744)
Use JsonNullable wrapper on nullable/x-nullable fields (OpenAPITools#1762)
Add an option to use reflection in equals, hashCode (Java client) (OpenAPITools#1767)
[Slim] Encode path to support non-latin characters (OpenAPITools#1687)
[elm] Add support for sending headers (OpenAPITools#1704)
Add test case for InlineModelResolver: inline array response (OpenAPITools#1778)
fix group parameter logic (OpenAPITools#1779)
Add test case for InlineModelResolver: inline array request body (OpenAPITools#1777)
Add test case for InlineModelResolver: inline array schema (OpenAPITools#1772)
Fix type inference error (OpenAPITools#1773)
skip default value for contaier in spring (OpenAPITools#1725)
[Slim] Add PHP CodeSniffer config template (OpenAPITools#1764)
Use CompareNetObject for object comparison in C# client (refactor) (OpenAPITools#1765)
Add test case for InlineModelResolver (OpenAPITools#1771)
Add online gen tests (OpenAPITools#1759)
Resolve inline models before preprocess (OpenAPITools#1761)
better handling of allOf (composition) (OpenAPITools#1757)
Fix UUID support (OpenAPITools#1746)
Use appInfo.version for podspec (OpenAPITools#1760)
[Swift 4] Add `createURLRequest` method (OpenAPITools#1727)
...
A-Joshi pushed a commit to ihsmarkitoss/openapi-generator that referenced this pull request Feb 27, 2019
* Add custom type adapter to deserialize UUID
* Update samples
./bin/kotlin-client-threetenbp.sh
./bin/kotlin-client-string.sh
./bin/kotlin-client-petstore.sh
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][Kotlin] Generated Serializer for ApiClient does not support UUID

3 participants

@ackintosh@wing328@jimschubert