calabash-android 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (532) hide show
  1. data/CHANGES.txt +1 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +8 -0
  4. data/Rakefile +2 -0
  5. data/bin/calabash-android +42 -0
  6. data/bin/calabash-android-build.rb +37 -0
  7. data/bin/calabash-android-generate.rb +26 -0
  8. data/bin/calabash-android-helpers.rb +71 -0
  9. data/bin/calabash-android-run.rb +18 -0
  10. data/bin/calabash-android-setup.rb +392 -0
  11. data/calabash-android.gemspec +23 -0
  12. data/doc/calabash-android-help.txt +21 -0
  13. data/epl-v10.html +261 -0
  14. data/features-skeleton/.irbrc +16 -0
  15. data/features-skeleton/irb_android.sh +2 -0
  16. data/features-skeleton/my_first.feature +5 -0
  17. data/features-skeleton/step_definitions/calabash_steps.rb +1 -0
  18. data/features-skeleton/support/app_installation_hooks.rb +26 -0
  19. data/features-skeleton/support/app_life_cycle_hooks.rb +28 -0
  20. data/features-skeleton/support/env.rb +1 -0
  21. data/features-skeleton/support/hooks.rb +18 -0
  22. data/lib/calabash-android.rb +2 -0
  23. data/lib/calabash-android/calabash_steps.rb +18 -0
  24. data/lib/calabash-android/canned_steps.md +239 -0
  25. data/lib/calabash-android/color_helper.rb +13 -0
  26. data/lib/calabash-android/cucumber.rb +9 -0
  27. data/lib/calabash-android/lib/screenShotTaker.jar +0 -0
  28. data/lib/calabash-android/management/adb.rb +11 -0
  29. data/lib/calabash-android/management/app_installation.rb +21 -0
  30. data/lib/calabash-android/operations.rb +283 -0
  31. data/lib/calabash-android/steps/additions_manual_steps.rb +11 -0
  32. data/lib/calabash-android/steps/app_steps.rb +10 -0
  33. data/lib/calabash-android/steps/assert_steps.rb +32 -0
  34. data/lib/calabash-android/steps/check_box_steps.rb +3 -0
  35. data/lib/calabash-android/steps/context_menu_steps.rb +12 -0
  36. data/lib/calabash-android/steps/date_picker_steps.rb +8 -0
  37. data/lib/calabash-android/steps/enter_text_steps.rb +21 -0
  38. data/lib/calabash-android/steps/location_steps.rb +19 -0
  39. data/lib/calabash-android/steps/navigation_steps.rb +27 -0
  40. data/lib/calabash-android/steps/press_button_steps.rb +35 -0
  41. data/lib/calabash-android/steps/progress_steps.rb +49 -0
  42. data/lib/calabash-android/steps/rotation_steps.rb +8 -0
  43. data/lib/calabash-android/steps/screenshot_steps.rb +11 -0
  44. data/lib/calabash-android/steps/spinner_steps.rb +3 -0
  45. data/lib/calabash-android/steps/time_picker_steps.rb +8 -0
  46. data/lib/calabash-android/version.rb +6 -0
  47. data/test-server/AndroidManifest.xml +13 -0
  48. data/test-server/build.xml +192 -0
  49. data/test-server/calabash-js/src/calabash.js +125 -0
  50. data/test-server/calabash-js/src/set_text.js +132 -0
  51. data/test-server/instrumentation-backend/.classpath +10 -0
  52. data/test-server/instrumentation-backend/.project +33 -0
  53. data/test-server/instrumentation-backend/.settings/org.eclipse.jdt.core.prefs +12 -0
  54. data/test-server/instrumentation-backend/AndroidManifest.xml +15 -0
  55. data/test-server/instrumentation-backend/assets/foo.bar +0 -0
  56. data/test-server/instrumentation-backend/gen/com/lesspainful/simpleui/test/R.java +23 -0
  57. data/test-server/instrumentation-backend/libs/robotium-solo-2.5.jar +0 -0
  58. data/test-server/instrumentation-backend/project.properties +11 -0
  59. data/test-server/instrumentation-backend/res/drawable-hdpi/ic_launcher.png +0 -0
  60. data/test-server/instrumentation-backend/res/drawable-ldpi/ic_launcher.png +0 -0
  61. data/test-server/instrumentation-backend/res/drawable-mdpi/ic_launcher.png +0 -0
  62. data/test-server/instrumentation-backend/res/layout/main.xml +12 -0
  63. data/test-server/instrumentation-backend/res/values/strings.xml +7 -0
  64. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java +48 -0
  65. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +196 -0
  66. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +64 -0
  67. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/TestHelpers.java +136 -0
  68. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Action.java +11 -0
  69. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/Actions.java +113 -0
  70. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/NullAction.java +23 -0
  71. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonNumber.java +22 -0
  72. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonText.java +27 -0
  73. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonNumber.java +22 -0
  74. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/WaitForButton.java +47 -0
  75. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/checkbox/ToggleCheckboxNumber.java +22 -0
  76. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressText.java +22 -0
  77. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuById.java +26 -0
  78. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByIndex.java +22 -0
  79. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByText.java +26 -0
  80. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/ClickOnScreen.java +31 -0
  81. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/Swipe.java +28 -0
  82. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/ListActions.java +26 -0
  83. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/LongPressListItems.java +22 -0
  84. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/PressListItems.java +22 -0
  85. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/location/FakeGPSLocation.java +79 -0
  86. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollDown.java +28 -0
  87. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollUp.java +28 -0
  88. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/DownKey.java +24 -0
  89. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/GoBack.java +22 -0
  90. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/PressMenu.java +26 -0
  91. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/SelectFromMenuByText.java +24 -0
  92. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java +43 -0
  93. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java +31 -0
  94. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java +32 -0
  95. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java +22 -0
  96. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java +33 -0
  97. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java +22 -0
  98. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java +32 -0
  99. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java +22 -0
  100. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByContentDescription.java +33 -0
  101. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetDateByIndex.java +24 -0
  102. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByContentDescription.java +34 -0
  103. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/time/SetTimeByIndex.java +26 -0
  104. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java +63 -0
  105. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java +34 -0
  106. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java +89 -0
  107. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/WaitForViewById.java +41 -0
  108. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java +24 -0
  109. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java +21 -0
  110. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForProgress.java +47 -0
  111. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +49 -0
  112. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +26 -0
  113. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/CalabashChromeClient.java +109 -0
  114. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpBodyHtml.java +33 -0
  115. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpHtml.java +33 -0
  116. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/EnterTextByCssSelector.java +99 -0
  117. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +43 -0
  118. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Query.java +24 -0
  119. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +99 -0
  120. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java +74 -0
  121. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java +43 -0
  122. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +50 -0
  123. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Touch.java +44 -0
  124. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variant.java +413 -0
  125. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variants.java +90 -0
  126. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/FormatSchema.java +29 -0
  127. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonEncoding.java +47 -0
  128. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonFactory.java +937 -0
  129. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerationException.java +28 -0
  130. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonGenerator.java +1197 -0
  131. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonLocation.java +141 -0
  132. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonNode.java +879 -0
  133. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParseException.java +23 -0
  134. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonParser.java +1434 -0
  135. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonProcessingException.java +80 -0
  136. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonStreamContext.java +122 -0
  137. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/JsonToken.java +161 -0
  138. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/ObjectCodec.java +157 -0
  139. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/PrettyPrinter.java +166 -0
  140. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/SerializableString.java +54 -0
  141. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Version.java +90 -0
  142. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Versioned.java +20 -0
  143. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JacksonAnnotation.java +20 -0
  144. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnyGetter.java +25 -0
  145. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAnySetter.java +24 -0
  146. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonAutoDetect.java +148 -0
  147. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonBackReference.java +41 -0
  148. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonCreator.java +19 -0
  149. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonGetter.java +35 -0
  150. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnore.java +57 -0
  151. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreProperties.java +48 -0
  152. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonIgnoreType.java +33 -0
  153. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonManagedReference.java +41 -0
  154. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonMethod.java +90 -0
  155. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonProperty.java +38 -0
  156. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonPropertyOrder.java +46 -0
  157. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonRawValue.java +33 -0
  158. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSetter.java +33 -0
  159. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonSubTypes.java +44 -0
  160. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeInfo.java +236 -0
  161. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonTypeName.java +28 -0
  162. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonUnwrapped.java +76 -0
  163. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonValue.java +46 -0
  164. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/JsonWriteNullProperties.java +34 -0
  165. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/annotate/package-info.java +16 -0
  166. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatDetector.java +176 -0
  167. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/DataFormatMatcher.java +117 -0
  168. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/InputAccessor.java +130 -0
  169. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/MatchStrength.java +64 -0
  170. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/format/package-info.java +8 -0
  171. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ByteSourceBootstrapper.java +518 -0
  172. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/DefaultPrettyPrinter.java +13 -0
  173. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Indenter.java +23 -0
  174. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonGeneratorBase.java +570 -0
  175. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonNumericParserBase.java +20 -0
  176. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserBase.java +1067 -0
  177. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonParserMinimalBase.java +539 -0
  178. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonReadContext.java +188 -0
  179. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/JsonWriteContext.java +178 -0
  180. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParser.java +1815 -0
  181. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/ReaderBasedParserBase.java +228 -0
  182. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/StreamBasedParserBase.java +197 -0
  183. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8Generator.java +1757 -0
  184. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/Utf8StreamParser.java +2966 -0
  185. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/WriterBasedGenerator.java +1815 -0
  186. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/impl/package-info.java +6 -0
  187. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/BaseReader.java +117 -0
  188. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/CharacterEscapes.java +73 -0
  189. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/IOContext.java +239 -0
  190. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/InputDecorator.java +67 -0
  191. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/JsonStringEncoder.java +408 -0
  192. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/MergedStream.java +145 -0
  193. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberInput.java +303 -0
  194. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/NumberOutput.java +398 -0
  195. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/OutputDecorator.java +40 -0
  196. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SegmentedStringWriter.java +104 -0
  197. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/SerializedString.java +114 -0
  198. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF32Reader.java +214 -0
  199. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/UTF8Writer.java +387 -0
  200. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/io/package.html +4 -0
  201. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AbstractTypeResolver.java +63 -0
  202. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/AnnotationIntrospector.java +1485 -0
  203. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanDescription.java +171 -0
  204. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanProperty.java +123 -0
  205. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/BeanPropertyDefinition.java +66 -0
  206. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ClassIntrospector.java +117 -0
  207. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualDeserializer.java +38 -0
  208. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualKeyDeserializer.java +33 -0
  209. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ContextualSerializer.java +38 -0
  210. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationConfig.java +926 -0
  211. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationContext.java +262 -0
  212. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializationProblemHandler.java +56 -0
  213. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerFactory.java +356 -0
  214. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/DeserializerProvider.java +185 -0
  215. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Deserializers.java +339 -0
  216. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/HandlerInstantiator.java +115 -0
  217. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/InjectableValues.java +85 -0
  218. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonDeserializer.java +166 -0
  219. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonMappingException.java +335 -0
  220. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializable.java +34 -0
  221. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializableWithType.java +22 -0
  222. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/JsonSerializer.java +138 -0
  223. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializer.java +31 -0
  224. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/KeyDeserializers.java +21 -0
  225. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MapperConfig.java +1154 -0
  226. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingIterator.java +190 -0
  227. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/MappingJsonFactory.java +81 -0
  228. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Module.java +255 -0
  229. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectMapper.java +2885 -0
  230. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectReader.java +958 -0
  231. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ObjectWriter.java +554 -0
  232. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/PropertyNamingStrategy.java +258 -0
  233. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableDeserializer.java +23 -0
  234. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ResolvableSerializer.java +23 -0
  235. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/RuntimeJsonMappingException.java +21 -0
  236. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializationConfig.java +1041 -0
  237. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerFactory.java +198 -0
  238. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/SerializerProvider.java +552 -0
  239. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/Serializers.java +137 -0
  240. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeDeserializer.java +118 -0
  241. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/TypeSerializer.java +164 -0
  242. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonInject.java +30 -0
  243. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JacksonStdImpl.java +25 -0
  244. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonCachable.java +32 -0
  245. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonDeserialize.java +109 -0
  246. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonFilter.java +31 -0
  247. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonRootName.java +29 -0
  248. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonSerialize.java +216 -0
  249. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeIdResolver.java +35 -0
  250. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonTypeResolver.java +28 -0
  251. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonValueInstantiator.java +26 -0
  252. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/JsonView.java +37 -0
  253. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/NoClass.java +19 -0
  254. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/annotate/package-info.java +5 -0
  255. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/AbstractDeserializer.java +102 -0
  256. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializer.java +28 -0
  257. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ArrayDeserializers.java +11 -0
  258. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BasicDeserializerFactory.java +894 -0
  259. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializer.java +1537 -0
  260. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerBuilder.java +277 -0
  261. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerFactory.java +1474 -0
  262. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/BeanDeserializerModifier.java +58 -0
  263. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CollectionDeserializer.java +47 -0
  264. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ContainerDeserializer.java +14 -0
  265. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/CustomDeserializerFactory.java +227 -0
  266. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/DateDeserializer.java +9 -0
  267. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumDeserializer.java +15 -0
  268. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/EnumResolver.java +17 -0
  269. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/FromStringDeserializer.java +13 -0
  270. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/JsonNodeDeserializer.java +54 -0
  271. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/MapDeserializer.java +44 -0
  272. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableAnyProperty.java +177 -0
  273. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/SettableBeanProperty.java +827 -0
  274. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializationContext.java +326 -0
  275. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializer.java +94 -0
  276. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializerProvider.java +494 -0
  277. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdDeserializers.java +119 -0
  278. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializer.java +12 -0
  279. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdKeyDeserializers.java +11 -0
  280. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/StdScalarDeserializer.java +13 -0
  281. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ThrowableDeserializer.java +13 -0
  282. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/UntypedObjectDeserializer.java +9 -0
  283. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiator.java +280 -0
  284. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/ValueInstantiators.java +52 -0
  285. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/BeanPropertyMap.java +257 -0
  286. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorCollector.java +141 -0
  287. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/CreatorProperty.java +152 -0
  288. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ExternalTypeHandler.java +173 -0
  289. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java +117 -0
  290. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValue.java +117 -0
  291. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/PropertyValueBuffer.java +102 -0
  292. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/UnwrappedPropertyHandler.java +41 -0
  293. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/ValueInjector.java +45 -0
  294. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/impl/package-info.java +9 -0
  295. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/package-info.java +5 -0
  296. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicBooleanDeserializer.java +22 -0
  297. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/AtomicReferenceDeserializer.java +47 -0
  298. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CalendarDeserializer.java +47 -0
  299. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ClassDeserializer.java +49 -0
  300. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/CollectionDeserializer.java +265 -0
  301. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ContainerDeserializerBase.java +37 -0
  302. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/DateDeserializer.java +30 -0
  303. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumDeserializer.java +139 -0
  304. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumMapDeserializer.java +90 -0
  305. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/EnumSetDeserializer.java +89 -0
  306. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/FromStringDeserializer.java +265 -0
  307. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JavaTypeDeserializer.java +38 -0
  308. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/JsonNodeDeserializer.java +314 -0
  309. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/MapDeserializer.java +412 -0
  310. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ObjectArrayDeserializer.java +201 -0
  311. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/PrimitiveArrayDeserializers.java +583 -0
  312. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdDeserializer.java +1136 -0
  313. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializer.java +340 -0
  314. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdKeyDeserializers.java +108 -0
  315. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdScalarDeserializer.java +34 -0
  316. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StdValueInstantiator.java +392 -0
  317. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringCollectionDeserializer.java +227 -0
  318. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/StringDeserializer.java +55 -0
  319. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/ThrowableDeserializer.java +164 -0
  320. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TimestampDeserializer.java +30 -0
  321. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/TokenBufferDeserializer.java +36 -0
  322. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/UntypedObjectDeserializer.java +248 -0
  323. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/deser/std/package-info.java +15 -0
  324. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/exc/UnrecognizedPropertyException.java +75 -0
  325. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/CoreXMLDeserializers.java +114 -0
  326. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/CoreXMLSerializers.java +72 -0
  327. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/DOMDeserializer.java +65 -0
  328. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/OptionalHandlerFactory.java +217 -0
  329. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ext/package-info.java +23 -0
  330. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/Annotated.java +85 -0
  331. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedClass.java +980 -0
  332. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedConstructor.java +143 -0
  333. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedField.java +119 -0
  334. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMember.java +56 -0
  335. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethod.java +188 -0
  336. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedMethodMap.java +85 -0
  337. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedParameter.java +191 -0
  338. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotatedWithParams.java +195 -0
  339. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/AnnotationMap.java +101 -0
  340. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicBeanDescription.java +615 -0
  341. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/BasicClassIntrospector.java +364 -0
  342. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/JacksonAnnotationIntrospector.java +813 -0
  343. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MemberKey.java +83 -0
  344. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/MethodFilter.java +12 -0
  345. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/NopAnnotationIntrospector.java +209 -0
  346. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertiesCollector.java +713 -0
  347. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/POJOPropertyBuilder.java +648 -0
  348. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/VisibilityChecker.java +424 -0
  349. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/introspect/package-info.java +12 -0
  350. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/NamedType.java +53 -0
  351. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/SubtypeResolver.java +39 -0
  352. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeIdResolver.java +74 -0
  353. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/TypeResolverBuilder.java +151 -0
  354. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeDeserializer.java +126 -0
  355. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsArrayTypeSerializer.java +110 -0
  356. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeDeserializer.java +37 -0
  357. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsExternalTypeSerializer.java +129 -0
  358. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeDeserializer.java +191 -0
  359. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsPropertyTypeSerializer.java +69 -0
  360. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeDeserializer.java +103 -0
  361. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/AsWrapperTypeSerializer.java +121 -0
  362. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/ClassNameIdResolver.java +138 -0
  363. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/MinimalClassNameIdResolver.java +66 -0
  364. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdSubtypeResolver.java +151 -0
  365. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/StdTypeResolverBuilder.java +202 -0
  366. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeDeserializerBase.java +154 -0
  367. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeIdResolverBase.java +37 -0
  368. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeNameIdResolver.java +154 -0
  369. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/TypeSerializerBase.java +31 -0
  370. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/impl/package-info.java +9 -0
  371. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/jsontype/package-info.java +10 -0
  372. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleAbstractTypeResolver.java +86 -0
  373. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleDeserializers.java +130 -0
  374. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleKeyDeserializers.java +59 -0
  375. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleModule.java +265 -0
  376. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleSerializers.java +206 -0
  377. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/SimpleValueInstantiators.java +45 -0
  378. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/module/package-info.java +16 -0
  379. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/package-info.java +34 -0
  380. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/AnyGetterWriter.java +48 -0
  381. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ArraySerializers.java +7 -0
  382. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BasicSerializerFactory.java +806 -0
  383. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyFilter.java +30 -0
  384. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanPropertyWriter.java +512 -0
  385. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializer.java +126 -0
  386. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerBuilder.java +140 -0
  387. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerFactory.java +780 -0
  388. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/BeanSerializerModifier.java +95 -0
  389. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ContainerSerializers.java +8 -0
  390. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/CustomSerializerFactory.java +293 -0
  391. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/EnumSerializer.java +17 -0
  392. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilterProvider.java +23 -0
  393. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/FilteredBeanPropertyWriter.java +96 -0
  394. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/JdkSerializers.java +11 -0
  395. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/MapSerializer.java +58 -0
  396. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/PropertyBuilder.java +372 -0
  397. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ScalarSerializerBase.java +18 -0
  398. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/SerializerBase.java +23 -0
  399. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdKeySerializer.java +10 -0
  400. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializerProvider.java +852 -0
  401. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/StdSerializers.java +372 -0
  402. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/ToStringSerializer.java +14 -0
  403. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/FailingSerializer.java +43 -0
  404. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/JsonSerializerMap.java +93 -0
  405. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/PropertySerializerMap.java +231 -0
  406. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/ReadOnlyClassToSerializerMap.java +73 -0
  407. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SerializerCache.java +304 -0
  408. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleBeanPropertyFilter.java +109 -0
  409. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/SimpleFilterProvider.java +114 -0
  410. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnknownSerializer.java +54 -0
  411. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanPropertyWriter.java +99 -0
  412. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/UnwrappingBeanSerializer.java +76 -0
  413. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/impl/package-info.java +5 -0
  414. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/package-info.java +5 -0
  415. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/AsArraySerializerBase.java +185 -0
  416. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/BeanSerializerBase.java +340 -0
  417. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CalendarSerializer.java +43 -0
  418. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/CollectionSerializer.java +113 -0
  419. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ContainerSerializerBase.java +51 -0
  420. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/DateSerializer.java +42 -0
  421. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumMapSerializer.java +218 -0
  422. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSerializer.java +84 -0
  423. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/EnumSetSerializer.java +47 -0
  424. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IndexedStringListSerializer.java +116 -0
  425. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/InetAddressSerializer.java +51 -0
  426. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/IterableSerializer.java +63 -0
  427. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/JsonValueSerializer.java +233 -0
  428. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/MapSerializer.java +422 -0
  429. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NonTypedScalarSerializerBase.java +34 -0
  430. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/NullSerializer.java +38 -0
  431. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ObjectArraySerializer.java +281 -0
  432. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/RawSerializer.java +52 -0
  433. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ScalarSerializerBase.java +52 -0
  434. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableSerializer.java +99 -0
  435. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializableWithTypeSerializer.java +90 -0
  436. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/SerializerBase.java +184 -0
  437. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StaticListSerializerBase.java +46 -0
  438. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdArraySerializers.java +476 -0
  439. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdContainerSerializers.java +249 -0
  440. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdJdkSerializers.java +195 -0
  441. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializer.java +43 -0
  442. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StdKeySerializers.java +95 -0
  443. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringCollectionSerializer.java +119 -0
  444. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/StringSerializer.java +36 -0
  445. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TimeZoneSerializer.java +38 -0
  446. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/ToStringSerializer.java +73 -0
  447. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/ser/std/TokenBufferSerializer.java +66 -0
  448. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ArrayType.java +260 -0
  449. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/ClassKey.java +94 -0
  450. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionLikeType.java +204 -0
  451. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/CollectionType.java +94 -0
  452. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/HierarchicType.java +88 -0
  453. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapLikeType.java +265 -0
  454. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/MapType.java +146 -0
  455. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/SimpleType.java +250 -0
  456. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBase.java +148 -0
  457. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeBindings.java +351 -0
  458. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeFactory.java +1165 -0
  459. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeModifier.java +38 -0
  460. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/TypeParser.java +134 -0
  461. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/type/package-info.java +10 -0
  462. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Annotations.java +23 -0
  463. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ArrayBuilders.java +293 -0
  464. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/BeanUtil.java +260 -0
  465. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ClassUtil.java +645 -0
  466. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Comparators.java +48 -0
  467. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumResolver.java +108 -0
  468. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/EnumValues.java +82 -0
  469. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601DateFormat.java +52 -0
  470. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ISO8601Utils.java +230 -0
  471. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONPObject.java +105 -0
  472. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/JSONWrappedObject.java +117 -0
  473. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LRUMap.java +28 -0
  474. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/LinkedNode.java +45 -0
  475. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Named.java +10 -0
  476. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/ObjectBuffer.java +257 -0
  477. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/PrimitiveArrayBuilder.java +180 -0
  478. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/Provider.java +21 -0
  479. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/RootNameLookup.java +54 -0
  480. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/StdDateFormat.java +348 -0
  481. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/map/util/package-info.java +4 -0
  482. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ArrayNode.java +758 -0
  483. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BaseJsonNode.java +122 -0
  484. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BigIntegerNode.java +104 -0
  485. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BinaryNode.java +136 -0
  486. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/BooleanNode.java +84 -0
  487. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ContainerNode.java +185 -0
  488. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DecimalNode.java +96 -0
  489. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/DoubleNode.java +106 -0
  490. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/IntNode.java +122 -0
  491. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/JsonNodeFactory.java +222 -0
  492. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/LongNode.java +99 -0
  493. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/MissingNode.java +97 -0
  494. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NodeCursor.java +222 -0
  495. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NullNode.java +58 -0
  496. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/NumericNode.java +72 -0
  497. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ObjectNode.java +696 -0
  498. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/POJONode.java +145 -0
  499. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TextNode.java +299 -0
  500. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/TreeTraversingParser.java +383 -0
  501. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/ValueNode.java +58 -0
  502. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/node/package-info.java +8 -0
  503. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/package-info.java +30 -0
  504. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSchema.java +82 -0
  505. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/JsonSerializableSchema.java +46 -0
  506. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/SchemaAware.java +25 -0
  507. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/schema/package-info.java +5 -0
  508. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/BytesToNameCanonicalizer.java +969 -0
  509. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/CharsToNameCanonicalizer.java +578 -0
  510. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name.java +50 -0
  511. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name1.java +44 -0
  512. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name2.java +40 -0
  513. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/Name3.java +39 -0
  514. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/NameN.java +68 -0
  515. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/sym/package-info.java +5 -0
  516. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/JavaType.java +503 -0
  517. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/TypeReference.java +60 -0
  518. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/type/package-info.java +8 -0
  519. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/BufferRecycler.java +109 -0
  520. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/ByteArrayBuilder.java +294 -0
  521. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/CharTypes.java +237 -0
  522. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/DefaultPrettyPrinter.java +282 -0
  523. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/InternCache.java +49 -0
  524. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonGeneratorDelegate.java +273 -0
  525. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserDelegate.java +251 -0
  526. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/JsonParserSequence.java +150 -0
  527. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/MinimalPrettyPrinter.java +152 -0
  528. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TextBuffer.java +707 -0
  529. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TokenBuffer.java +1233 -0
  530. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/VersionUtil.java +79 -0
  531. data/test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/package-info.java +4 -0
  532. metadata +619 -0
@@ -0,0 +1,277 @@
1
+ package sh.calaba.org.codehaus.jackson.map.deser;
2
+
3
+ import java.util.*;
4
+
5
+ import sh.calaba.org.codehaus.jackson.map.*;
6
+ import sh.calaba.org.codehaus.jackson.map.deser.impl.BeanPropertyMap;
7
+ import sh.calaba.org.codehaus.jackson.map.deser.impl.ValueInjector;
8
+ import sh.calaba.org.codehaus.jackson.map.introspect.AnnotatedMember;
9
+ import sh.calaba.org.codehaus.jackson.map.introspect.BasicBeanDescription;
10
+ import sh.calaba.org.codehaus.jackson.map.util.Annotations;
11
+ import sh.calaba.org.codehaus.jackson.type.JavaType;
12
+
13
+ /**
14
+ * Builder class used for aggregating deserialization information about
15
+ * a POJO, in order to build a {@link JsonDeserializer} for deserializing
16
+ * intances.
17
+ *
18
+ * @since 1.7
19
+ */
20
+ public class BeanDeserializerBuilder
21
+ {
22
+ /*
23
+ /**********************************************************
24
+ /* General information about POJO
25
+ /**********************************************************
26
+ */
27
+
28
+ final protected BasicBeanDescription _beanDesc;
29
+
30
+ /*
31
+ /**********************************************************
32
+ /* Accumulated information about properties
33
+ /**********************************************************
34
+ */
35
+
36
+ /**
37
+ * Properties to deserialize collected so far.
38
+ *<p>
39
+ * Note: since 1.9.1, LinkedHashMap has been used, since preservation
40
+ * of order is actually important for some use cases.
41
+ */
42
+ final protected HashMap<String, SettableBeanProperty> _properties = new LinkedHashMap<String, SettableBeanProperty>();
43
+
44
+ /**
45
+ * Value injectors for deserialization
46
+ *
47
+ * @since 1.9
48
+ */
49
+ protected List<ValueInjector> _injectables;
50
+
51
+ /**
52
+ * Back-reference properties this bean contains (if any)
53
+ */
54
+ protected HashMap<String, SettableBeanProperty> _backRefProperties;
55
+
56
+ /**
57
+ * Set of names of properties that are recognized but are to be ignored for deserialization
58
+ * purposes (meaning no exception is thrown, value is just skipped).
59
+ */
60
+ protected HashSet<String> _ignorableProps;
61
+
62
+ /**
63
+ * Object that will handle value instantiation for the bean type.
64
+ *
65
+ * @since 1.9
66
+ */
67
+ protected ValueInstantiator _valueInstantiator;
68
+
69
+ /**
70
+ * Fallback setter used for handling any properties that are not
71
+ * mapped to regular setters. If setter is not null, it will be
72
+ * called once for each such property.
73
+ */
74
+ protected SettableAnyProperty _anySetter;
75
+
76
+ /**
77
+ * Flag that can be set to ignore and skip unknown properties.
78
+ * If set, will not throw an exception for unknown properties.
79
+ */
80
+ protected boolean _ignoreAllUnknown;
81
+
82
+ /*
83
+ /**********************************************************
84
+ /* Life-cycle: construction
85
+ /**********************************************************
86
+ */
87
+
88
+ public BeanDeserializerBuilder(BasicBeanDescription beanDesc)
89
+ {
90
+ _beanDesc = beanDesc;
91
+ }
92
+
93
+ /**
94
+ * Copy constructor for sub-classes to use, when constructing
95
+ * custom builder instances
96
+ *
97
+ * @since 1.9
98
+ */
99
+ protected BeanDeserializerBuilder(BeanDeserializerBuilder src)
100
+ {
101
+ _beanDesc = src._beanDesc;
102
+ _anySetter = src._anySetter;
103
+ _ignoreAllUnknown = src._ignoreAllUnknown;
104
+
105
+ // let's make copy of properties
106
+ _properties.putAll(src._properties);
107
+ _backRefProperties = _copy(src._backRefProperties);
108
+ // Hmmh. Should we create defensive copies here? For now, not yet
109
+ _ignorableProps = src._ignorableProps;
110
+ _valueInstantiator = src._valueInstantiator;
111
+ }
112
+
113
+ private static HashMap<String, SettableBeanProperty> _copy(HashMap<String, SettableBeanProperty> src)
114
+ {
115
+ if (src == null) {
116
+ return null;
117
+ }
118
+ return new HashMap<String, SettableBeanProperty>(src);
119
+ }
120
+
121
+ /*
122
+ /**********************************************************
123
+ /* Life-cycle: state modification (adders, setters)
124
+ /**********************************************************
125
+ */
126
+
127
+ /**
128
+ * Method for adding a new property or replacing a property.
129
+ */
130
+ public void addOrReplaceProperty(SettableBeanProperty prop, boolean allowOverride)
131
+ {
132
+ _properties.put(prop.getName(), prop);
133
+ }
134
+
135
+ /**
136
+ * Method to add a property setter. Will ensure that there is no
137
+ * unexpected override; if one is found will throw a
138
+ * {@link IllegalArgumentException}.
139
+ */
140
+ public void addProperty(SettableBeanProperty prop)
141
+ {
142
+ SettableBeanProperty old = _properties.put(prop.getName(), prop);
143
+ if (old != null && old != prop) { // should never occur...
144
+ throw new IllegalArgumentException("Duplicate property '"+prop.getName()+"' for "+_beanDesc.getType());
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Method called to add a property that represents so-called back reference;
150
+ * reference that "points back" to object that has forward reference to
151
+ * currently built bean.
152
+ */
153
+ public void addBackReferenceProperty(String referenceName, SettableBeanProperty prop)
154
+ {
155
+ if (_backRefProperties == null) {
156
+ _backRefProperties = new HashMap<String, SettableBeanProperty>(4);
157
+ }
158
+ _backRefProperties.put(referenceName, prop);
159
+ // also: if we had property with same name, actually remove it
160
+ if (_properties != null) {
161
+ _properties.remove(prop.getName());
162
+ }
163
+ }
164
+
165
+ /**
166
+ * @since 1.9
167
+ */
168
+ public void addInjectable(String propertyName, JavaType propertyType,
169
+ Annotations contextAnnotations, AnnotatedMember member,
170
+ Object valueId)
171
+ {
172
+ if (_injectables == null) {
173
+ _injectables = new ArrayList<ValueInjector>();
174
+ }
175
+ _injectables.add(new ValueInjector(propertyName, propertyType,
176
+ contextAnnotations, member, valueId));
177
+ }
178
+
179
+ /**
180
+ * Method that will add property name as one of properties that can
181
+ * be ignored if not recognized.
182
+ */
183
+ public void addIgnorable(String propName)
184
+ {
185
+ if (_ignorableProps == null) {
186
+ _ignorableProps = new HashSet<String>();
187
+ }
188
+ _ignorableProps.add(propName);
189
+ }
190
+
191
+ /**
192
+ * Method called by deserializer factory, when a "creator property"
193
+ * (something that is passed via constructor- or factory method argument;
194
+ * instead of setter or field).
195
+ *<p>
196
+ * Default implementation does not do anything; we may need to revisit this
197
+ * decision if these properties need to be available through accessors.
198
+ * For now, however, we just have to ensure that we don't try to resolve
199
+ * types that masked setter/field has (see [JACKSON-700] for details).
200
+ *
201
+ * @since 1.9.2
202
+ */
203
+ public void addCreatorProperty(BeanPropertyDefinition propDef)
204
+ {
205
+ // do nothing
206
+ }
207
+
208
+ public void setAnySetter(SettableAnyProperty s)
209
+ {
210
+ if (_anySetter != null && s != null) {
211
+ throw new IllegalStateException("_anySetter already set to non-null");
212
+ }
213
+ _anySetter = s;
214
+ }
215
+
216
+ public void setIgnoreUnknownProperties(boolean ignore) {
217
+ _ignoreAllUnknown = ignore;
218
+ }
219
+
220
+ /**
221
+ * @since 1.9
222
+ */
223
+ public void setValueInstantiator(ValueInstantiator inst) {
224
+ _valueInstantiator = inst;
225
+ }
226
+
227
+ /*
228
+ /**********************************************************
229
+ /* Public accessors
230
+ /**********************************************************
231
+ */
232
+
233
+ /**
234
+ * Method that allows accessing all properties that this
235
+ * builder currently contains.
236
+ *<p>
237
+ * Note that properties are returned in order that properties
238
+ * are ordered (explictly, or by rule), which is the serialization
239
+ * order.
240
+ *
241
+ * @since 1.8.3
242
+ */
243
+ public Iterator<SettableBeanProperty> getProperties() {
244
+ return _properties.values().iterator();
245
+ }
246
+
247
+ public boolean hasProperty(String propertyName) {
248
+ return _properties.containsKey(propertyName);
249
+ }
250
+
251
+ public SettableBeanProperty removeProperty(String name)
252
+ {
253
+ return _properties.remove(name);
254
+ }
255
+
256
+ /**
257
+ * @since 1.9
258
+ */
259
+ public ValueInstantiator getValueInstantiator() {
260
+ return _valueInstantiator;
261
+ }
262
+
263
+ /*
264
+ /**********************************************************
265
+ /* Build method(s)
266
+ /**********************************************************
267
+ */
268
+
269
+ public JsonDeserializer<?> build(BeanProperty forProperty)
270
+ {
271
+ BeanPropertyMap propertyMap = new BeanPropertyMap(_properties.values());
272
+ propertyMap.assignIndexes();
273
+ return new BeanDeserializer(_beanDesc, forProperty,
274
+ _valueInstantiator, propertyMap, _backRefProperties, _ignorableProps, _ignoreAllUnknown,
275
+ _anySetter, _injectables);
276
+ }
277
+ }
@@ -0,0 +1,1474 @@
1
+ package sh.calaba.org.codehaus.jackson.map.deser;
2
+
3
+ import java.util.*;
4
+
5
+ import sh.calaba.org.codehaus.jackson.JsonNode;
6
+ import sh.calaba.org.codehaus.jackson.map.*;
7
+ import sh.calaba.org.codehaus.jackson.map.deser.impl.CreatorCollector;
8
+ import sh.calaba.org.codehaus.jackson.map.deser.impl.CreatorProperty;
9
+ import sh.calaba.org.codehaus.jackson.map.deser.std.StdKeyDeserializers;
10
+ import sh.calaba.org.codehaus.jackson.map.deser.std.ThrowableDeserializer;
11
+ import sh.calaba.org.codehaus.jackson.map.introspect.*;
12
+ import sh.calaba.org.codehaus.jackson.map.type.*;
13
+ import sh.calaba.org.codehaus.jackson.map.util.ArrayBuilders;
14
+ import sh.calaba.org.codehaus.jackson.map.util.ClassUtil;
15
+ import sh.calaba.org.codehaus.jackson.map.util.EnumResolver;
16
+ import sh.calaba.org.codehaus.jackson.type.JavaType;
17
+
18
+ /**
19
+ * Concrete deserializer factory class that adds full Bean deserializer
20
+ * construction logic using class introspection.
21
+ *<p>
22
+ * Since there is no caching, this factory is stateless and a globally
23
+ * shared singleton instance ({@link #instance}) can be used by
24
+ * {@link DeserializerProvider}s).
25
+ */
26
+ public class BeanDeserializerFactory
27
+ extends BasicDeserializerFactory
28
+ {
29
+ /**
30
+ * Signature of <b>Throwable.initCause</b> method.
31
+ */
32
+ private final static Class<?>[] INIT_CAUSE_PARAMS = new Class<?>[] { Throwable.class };
33
+
34
+ /*
35
+ /**********************************************************
36
+ /* Config class implementation
37
+ /**********************************************************
38
+ */
39
+
40
+ /**
41
+ * Standard configuration settings container class implementation.
42
+ *
43
+ * @since 1.7
44
+ */
45
+ public static class ConfigImpl extends Config
46
+ {
47
+ protected final static KeyDeserializers[] NO_KEY_DESERIALIZERS = new KeyDeserializers[0];
48
+ protected final static BeanDeserializerModifier[] NO_MODIFIERS = new BeanDeserializerModifier[0];
49
+ protected final static AbstractTypeResolver[] NO_ABSTRACT_TYPE_RESOLVERS = new AbstractTypeResolver[0];
50
+ protected final static ValueInstantiators[] NO_VALUE_INSTANTIATORS = new ValueInstantiators[0];
51
+
52
+ /**
53
+ * List of providers for additional deserializers, checked before considering default
54
+ * basic or bean deserializers.
55
+ *
56
+ * @since 1.7
57
+ */
58
+ protected final Deserializers[] _additionalDeserializers;
59
+
60
+ /**
61
+ * List of providers for additional key deserializers, checked before considering
62
+ * standard key deserializers.
63
+ *
64
+ * @since 1.7
65
+ */
66
+ protected final KeyDeserializers[] _additionalKeyDeserializers;
67
+
68
+ /**
69
+ * List of modifiers that can change the way {@link BeanDeserializer} instances
70
+ * are configured and constructed.
71
+ */
72
+ protected final BeanDeserializerModifier[] _modifiers;
73
+
74
+ /**
75
+ * List of objects that may be able to resolve abstract types to
76
+ * concrete types. Used by functionality like "mr Bean" to materialize
77
+ * types as needed.
78
+ *
79
+ * @since 1.8
80
+ */
81
+ protected final AbstractTypeResolver[] _abstractTypeResolvers;
82
+
83
+ /**
84
+ * List of objects that know how to create instances of POJO types;
85
+ * possibly using custom construction (non-annoted constructors; factory
86
+ * methods external to value type etc).
87
+ * Used to support objects that are created using non-standard methods;
88
+ * or to support post-constructor functionality.
89
+ *
90
+ * @since 1.9
91
+ */
92
+ protected final ValueInstantiators[] _valueInstantiators;
93
+
94
+ /**
95
+ * Constructor for creating basic configuration with no additional
96
+ * handlers.
97
+ */
98
+ public ConfigImpl() {
99
+ this(null, null, null, null, null);
100
+ }
101
+
102
+ /**
103
+ * Copy-constructor that will create an instance that contains defined
104
+ * set of additional deserializer providers.
105
+ */
106
+ protected ConfigImpl(Deserializers[] allAdditionalDeserializers,
107
+ KeyDeserializers[] allAdditionalKeyDeserializers,
108
+ BeanDeserializerModifier[] modifiers,
109
+ AbstractTypeResolver[] atr,
110
+ ValueInstantiators[] vi)
111
+ {
112
+ _additionalDeserializers = (allAdditionalDeserializers == null) ?
113
+ NO_DESERIALIZERS : allAdditionalDeserializers;
114
+ _additionalKeyDeserializers = (allAdditionalKeyDeserializers == null) ?
115
+ NO_KEY_DESERIALIZERS : allAdditionalKeyDeserializers;
116
+ _modifiers = (modifiers == null) ? NO_MODIFIERS : modifiers;
117
+ _abstractTypeResolvers = (atr == null) ? NO_ABSTRACT_TYPE_RESOLVERS : atr;
118
+ _valueInstantiators = (vi == null) ? NO_VALUE_INSTANTIATORS : vi;
119
+ }
120
+
121
+ @Override
122
+ public Config withAdditionalDeserializers(Deserializers additional)
123
+ {
124
+ if (additional == null) {
125
+ throw new IllegalArgumentException("Can not pass null Deserializers");
126
+ }
127
+ Deserializers[] all = ArrayBuilders.insertInListNoDup(_additionalDeserializers, additional);
128
+ return new ConfigImpl(all, _additionalKeyDeserializers, _modifiers,
129
+ _abstractTypeResolvers, _valueInstantiators);
130
+ }
131
+
132
+ @Override
133
+ public Config withAdditionalKeyDeserializers(KeyDeserializers additional)
134
+ {
135
+ if (additional == null) {
136
+ throw new IllegalArgumentException("Can not pass null KeyDeserializers");
137
+ }
138
+ KeyDeserializers[] all = ArrayBuilders.insertInListNoDup(_additionalKeyDeserializers, additional);
139
+ return new ConfigImpl(_additionalDeserializers, all, _modifiers,
140
+ _abstractTypeResolvers, _valueInstantiators);
141
+ }
142
+
143
+ @Override
144
+ public Config withDeserializerModifier(BeanDeserializerModifier modifier)
145
+ {
146
+ if (modifier == null) {
147
+ throw new IllegalArgumentException("Can not pass null modifier");
148
+ }
149
+ BeanDeserializerModifier[] all = ArrayBuilders.insertInListNoDup(_modifiers, modifier);
150
+ return new ConfigImpl(_additionalDeserializers, _additionalKeyDeserializers, all,
151
+ _abstractTypeResolvers, _valueInstantiators);
152
+ }
153
+
154
+ @Override
155
+ public Config withAbstractTypeResolver(AbstractTypeResolver resolver)
156
+ {
157
+ if (resolver == null) {
158
+ throw new IllegalArgumentException("Can not pass null resolver");
159
+ }
160
+ AbstractTypeResolver[] all = ArrayBuilders.insertInListNoDup(_abstractTypeResolvers, resolver);
161
+ return new ConfigImpl(_additionalDeserializers, _additionalKeyDeserializers, _modifiers,
162
+ all, _valueInstantiators);
163
+ }
164
+
165
+ @Override
166
+ public Config withValueInstantiators(ValueInstantiators instantiators)
167
+ {
168
+ if (instantiators == null) {
169
+ throw new IllegalArgumentException("Can not pass null resolver");
170
+ }
171
+ ValueInstantiators[] all = ArrayBuilders.insertInListNoDup(_valueInstantiators, instantiators);
172
+ return new ConfigImpl(_additionalDeserializers, _additionalKeyDeserializers, _modifiers,
173
+ _abstractTypeResolvers, all);
174
+ }
175
+
176
+ @Override
177
+ public boolean hasDeserializers() { return _additionalDeserializers.length > 0; }
178
+
179
+ @Override
180
+ public boolean hasKeyDeserializers() { return _additionalKeyDeserializers.length > 0; }
181
+
182
+ @Override
183
+ public boolean hasDeserializerModifiers() { return _modifiers.length > 0; }
184
+
185
+ @Override
186
+ public boolean hasAbstractTypeResolvers() { return _abstractTypeResolvers.length > 0; }
187
+
188
+ @Override
189
+ public boolean hasValueInstantiators() { return _valueInstantiators.length > 0; }
190
+
191
+ @Override
192
+ public Iterable<Deserializers> deserializers() {
193
+ return ArrayBuilders.arrayAsIterable(_additionalDeserializers);
194
+ }
195
+
196
+ @Override
197
+ public Iterable<KeyDeserializers> keyDeserializers() {
198
+ return ArrayBuilders.arrayAsIterable(_additionalKeyDeserializers);
199
+ }
200
+
201
+ @Override
202
+ public Iterable<BeanDeserializerModifier> deserializerModifiers() {
203
+ return ArrayBuilders.arrayAsIterable(_modifiers);
204
+ }
205
+
206
+ @Override
207
+ public Iterable<AbstractTypeResolver> abstractTypeResolvers() {
208
+ return ArrayBuilders.arrayAsIterable(_abstractTypeResolvers);
209
+ }
210
+
211
+ @Override
212
+ public Iterable<ValueInstantiators> valueInstantiators() {
213
+ return ArrayBuilders.arrayAsIterable(_valueInstantiators);
214
+ }
215
+ }
216
+
217
+ /*
218
+ /**********************************************************
219
+ /* Life-cycle
220
+ /**********************************************************
221
+ */
222
+
223
+ /**
224
+ * Globally shareable thread-safe instance which has no additional custom deserializers
225
+ * registered
226
+ */
227
+ public final static BeanDeserializerFactory instance = new BeanDeserializerFactory(null);
228
+
229
+ /**
230
+ * Configuration settings for this factory; immutable instance (just like this
231
+ * factory), new version created via copy-constructor (fluent-style)
232
+ *
233
+ * @since 1.7
234
+ */
235
+ protected final Config _factoryConfig;
236
+
237
+ @Deprecated
238
+ public BeanDeserializerFactory() {
239
+ this(null);
240
+ }
241
+
242
+ /**
243
+ * @since 1.7
244
+ */
245
+ public BeanDeserializerFactory(DeserializerFactory.Config config) {
246
+ if (config == null) {
247
+ config = new ConfigImpl();
248
+ }
249
+ _factoryConfig = config;
250
+ }
251
+
252
+ @Override
253
+ public final Config getConfig() {
254
+ return _factoryConfig;
255
+ }
256
+
257
+ /**
258
+ * Method used by module registration functionality, to construct a new bean
259
+ * deserializer factory
260
+ * with different configuration settings.
261
+ *
262
+ * @since 1.7
263
+ */
264
+ @Override
265
+ public DeserializerFactory withConfig(DeserializerFactory.Config config)
266
+ {
267
+ if (_factoryConfig == config) {
268
+ return this;
269
+ }
270
+
271
+ /* 22-Nov-2010, tatu: Handling of subtypes is tricky if we do immutable-with-copy-ctor;
272
+ * and we pretty much have to here either choose between losing subtype instance
273
+ * when registering additional deserializers, or losing deserializers.
274
+ * Instead, let's actually just throw an error if this method is called when subtype
275
+ * has not properly overridden this method; this to indicate problem as soon as possible.
276
+ */
277
+ if (getClass() != BeanDeserializerFactory.class) {
278
+ throw new IllegalStateException("Subtype of BeanDeserializerFactory ("+getClass().getName()
279
+ +") has not properly overridden method 'withAdditionalDeserializers': can not instantiate subtype with "
280
+ +"additional deserializer definitions");
281
+ }
282
+ return new BeanDeserializerFactory(config);
283
+ }
284
+
285
+ /*
286
+ /**********************************************************
287
+ /* Overrides for super-class methods used for finding
288
+ /* custom deserializers
289
+ /**********************************************************
290
+ */
291
+
292
+ @Override
293
+ public KeyDeserializer createKeyDeserializer(DeserializationConfig config, JavaType type,
294
+ BeanProperty property)
295
+ throws JsonMappingException
296
+ {
297
+ // First: possible custom deserializers
298
+ if (_factoryConfig.hasKeyDeserializers()) {
299
+ BasicBeanDescription beanDesc = config.introspectClassAnnotations(type.getRawClass());
300
+ for (KeyDeserializers d : _factoryConfig.keyDeserializers()) {
301
+ KeyDeserializer deser = d.findKeyDeserializer(type, config, beanDesc, property);
302
+ if (deser != null) {
303
+ return deser;
304
+ }
305
+ }
306
+ }
307
+ // and if none found, standard ones:
308
+ // No serializer needed if it's plain old String, or Object/untyped
309
+ Class<?> raw = type.getRawClass();
310
+ if (raw == String.class || raw == Object.class) {
311
+ return StdKeyDeserializers.constructStringKeyDeserializer(config, type);
312
+ }
313
+ // Most other keys are of limited number of static types
314
+ KeyDeserializer kdes = _keyDeserializers.get(type);
315
+ if (kdes != null) {
316
+ return kdes;
317
+ }
318
+ // And then other one-offs; first, Enum:
319
+ if (type.isEnumType()) {
320
+ return _createEnumKeyDeserializer(config, type, property);
321
+ }
322
+ // One more thing: can we find ctor(String) or valueOf(String)?
323
+ kdes = StdKeyDeserializers.findStringBasedKeyDeserializer(config, type);
324
+ return kdes;
325
+ }
326
+
327
+ private KeyDeserializer _createEnumKeyDeserializer(DeserializationConfig config, JavaType type,
328
+ BeanProperty property)
329
+ throws JsonMappingException
330
+ {
331
+ BasicBeanDescription beanDesc = config.introspect(type);
332
+ Class<?> enumClass = type.getRawClass();
333
+ EnumResolver<?> enumRes = constructEnumResolver(enumClass, config);
334
+ // [JACKSON-193] May have @JsonCreator for static factory method:
335
+ for (AnnotatedMethod factory : beanDesc.getFactoryMethods()) {
336
+ if (config.getAnnotationIntrospector().hasCreatorAnnotation(factory)) {
337
+ int argCount = factory.getParameterCount();
338
+ if (argCount == 1) {
339
+ Class<?> returnType = factory.getRawType();
340
+ // usually should be class, but may be just plain Enum<?> (for Enum.valueOf()?)
341
+ if (returnType.isAssignableFrom(enumClass)) {
342
+ // note: mostly copied from 'EnumDeserializer.deserializerForCreator(...)'
343
+ if (factory.getParameterType(0) != String.class) {
344
+ throw new IllegalArgumentException("Parameter #0 type for factory method ("+factory+") not suitable, must be java.lang.String");
345
+ }
346
+ if (config.canOverrideAccessModifiers()) {
347
+ ClassUtil.checkAndFixAccess(factory.getMember());
348
+ }
349
+ return StdKeyDeserializers.constructEnumKeyDeserializer(enumRes, factory);
350
+ }
351
+ }
352
+ throw new IllegalArgumentException("Unsuitable method ("+factory+") decorated with @JsonCreator (for Enum type "
353
+ +enumClass.getName()+")");
354
+ }
355
+ }
356
+ // [JACKSON-749] Also, need to consider @JsonValue, if one found
357
+ return StdKeyDeserializers.constructEnumKeyDeserializer(enumRes);
358
+ }
359
+
360
+ @Override
361
+ protected JsonDeserializer<?> _findCustomArrayDeserializer(ArrayType type, DeserializationConfig config,
362
+ DeserializerProvider provider,
363
+ BeanProperty property,
364
+ TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
365
+ throws JsonMappingException
366
+ {
367
+ for (Deserializers d : _factoryConfig.deserializers()) {
368
+ JsonDeserializer<?> deser = d.findArrayDeserializer(type, config, provider, property,
369
+ elementTypeDeserializer, elementDeserializer);
370
+ if (deser != null) {
371
+ return deser;
372
+ }
373
+ }
374
+ return null;
375
+ }
376
+
377
+ @Override
378
+ protected JsonDeserializer<?> _findCustomCollectionDeserializer(CollectionType type, DeserializationConfig config,
379
+ DeserializerProvider provider, BasicBeanDescription beanDesc,
380
+ BeanProperty property,
381
+ TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
382
+ throws JsonMappingException
383
+ {
384
+ for (Deserializers d : _factoryConfig.deserializers()) {
385
+ JsonDeserializer<?> deser = d.findCollectionDeserializer(type, config, provider, beanDesc, property,
386
+ elementTypeDeserializer, elementDeserializer);
387
+ if (deser != null) {
388
+ return deser;
389
+ }
390
+ }
391
+ return null;
392
+ }
393
+
394
+ @Override
395
+ protected JsonDeserializer<?> _findCustomCollectionLikeDeserializer(CollectionLikeType type, DeserializationConfig config,
396
+ DeserializerProvider provider, BasicBeanDescription beanDesc,
397
+ BeanProperty property,
398
+ TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
399
+ throws JsonMappingException
400
+ {
401
+ for (Deserializers d : _factoryConfig.deserializers()) {
402
+ JsonDeserializer<?> deser = d.findCollectionLikeDeserializer(type, config, provider, beanDesc, property,
403
+ elementTypeDeserializer, elementDeserializer);
404
+ if (deser != null) {
405
+ return deser;
406
+ }
407
+ }
408
+ return null;
409
+ }
410
+
411
+ @Override
412
+ protected JsonDeserializer<?> _findCustomEnumDeserializer(Class<?> type, DeserializationConfig config,
413
+ BasicBeanDescription beanDesc, BeanProperty property)
414
+ throws JsonMappingException
415
+ {
416
+ for (Deserializers d : _factoryConfig.deserializers()) {
417
+ JsonDeserializer<?> deser = d.findEnumDeserializer(type, config, beanDesc, property);
418
+ if (deser != null) {
419
+ return deser;
420
+ }
421
+ }
422
+ return null;
423
+ }
424
+
425
+ @Override
426
+ protected JsonDeserializer<?> _findCustomMapDeserializer(MapType type,
427
+ DeserializationConfig config,
428
+ DeserializerProvider provider, BasicBeanDescription beanDesc, BeanProperty property,
429
+ KeyDeserializer keyDeserializer,
430
+ TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
431
+ throws JsonMappingException
432
+ {
433
+ for (Deserializers d : _factoryConfig.deserializers()) {
434
+ JsonDeserializer<?> deser = d.findMapDeserializer(type, config, provider, beanDesc, property,
435
+ keyDeserializer, elementTypeDeserializer, elementDeserializer);
436
+ if (deser != null) {
437
+ return deser;
438
+ }
439
+ }
440
+ return null;
441
+ }
442
+
443
+ @Override
444
+ protected JsonDeserializer<?> _findCustomMapLikeDeserializer(MapLikeType type,
445
+ DeserializationConfig config,
446
+ DeserializerProvider provider, BasicBeanDescription beanDesc, BeanProperty property,
447
+ KeyDeserializer keyDeserializer,
448
+ TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
449
+ throws JsonMappingException
450
+ {
451
+ for (Deserializers d : _factoryConfig.deserializers()) {
452
+ JsonDeserializer<?> deser = d.findMapLikeDeserializer(type, config, provider, beanDesc, property,
453
+ keyDeserializer, elementTypeDeserializer, elementDeserializer);
454
+ if (deser != null) {
455
+ return deser;
456
+ }
457
+ }
458
+ return null;
459
+ }
460
+
461
+ @Override
462
+ protected JsonDeserializer<?> _findCustomTreeNodeDeserializer(Class<? extends JsonNode> type,
463
+ DeserializationConfig config, BeanProperty property)
464
+ throws JsonMappingException
465
+ {
466
+ for (Deserializers d : _factoryConfig.deserializers()) {
467
+ JsonDeserializer<?> deser = d.findTreeNodeDeserializer(type, config, property);
468
+ if (deser != null) {
469
+ return deser;
470
+ }
471
+ }
472
+ return null;
473
+ }
474
+
475
+ // Note: NOT overriding, superclass has no matching method
476
+ @SuppressWarnings("unchecked")
477
+ protected JsonDeserializer<Object> _findCustomBeanDeserializer(JavaType type, DeserializationConfig config,
478
+ DeserializerProvider provider, BasicBeanDescription beanDesc, BeanProperty property)
479
+ throws JsonMappingException
480
+ {
481
+ for (Deserializers d : _factoryConfig.deserializers()) {
482
+ JsonDeserializer<?> deser = d.findBeanDeserializer(type, config, provider, beanDesc, property);
483
+ if (deser != null) {
484
+ return (JsonDeserializer<Object>) deser;
485
+ }
486
+ }
487
+ return null;
488
+ }
489
+
490
+ /*
491
+ /**********************************************************
492
+ /* DeserializerFactory API implementation
493
+ /**********************************************************
494
+ */
495
+
496
+ /**
497
+ * Method that will find complete abstract type mapping for specified type, doing as
498
+ * many resolution steps as necessary.
499
+ */
500
+ @Override
501
+ public JavaType mapAbstractType(DeserializationConfig config, JavaType type)
502
+ throws JsonMappingException
503
+ {
504
+ while (true) {
505
+ JavaType next = _mapAbstractType2(config, type);
506
+ if (next == null) {
507
+ return type;
508
+ }
509
+ /* Should not have to worry about cycles; but better verify since they will invariably
510
+ * occur... :-)
511
+ * (also: guard against invalid resolution to a non-related type)
512
+ */
513
+ Class<?> prevCls = type.getRawClass();
514
+ Class<?> nextCls = next.getRawClass();
515
+ if ((prevCls == nextCls) || !prevCls.isAssignableFrom(nextCls)) {
516
+ throw new IllegalArgumentException("Invalid abstract type resolution from "+type+" to "+next+": latter is not a subtype of former");
517
+ }
518
+ type = next;
519
+ }
520
+ }
521
+
522
+ /**
523
+ * Value instantiator is created both based on creator annotations,
524
+ * and on optional externally provided instantiators (registered through
525
+ * module interface).
526
+ */
527
+ @Override
528
+ public ValueInstantiator findValueInstantiator(DeserializationConfig config,
529
+ BasicBeanDescription beanDesc)
530
+ throws JsonMappingException
531
+ {
532
+ ValueInstantiator instantiator;
533
+ // [JACKSON-633] Check @JsonValueInstantiator before anything else
534
+ AnnotatedClass ac = beanDesc.getClassInfo();
535
+ Object instDef = config.getAnnotationIntrospector().findValueInstantiator(ac);
536
+ if (instDef != null) {
537
+ if (instDef instanceof ValueInstantiator) {
538
+ instantiator = (ValueInstantiator) instDef;
539
+ } else {
540
+ if (!(instDef instanceof Class<?>)) { // sanity check
541
+ throw new IllegalStateException("Invalid value instantiator returned for type "+beanDesc+": neither a Class nor ValueInstantiator");
542
+ }
543
+ Class<?> cls = (Class<?>) instDef;
544
+ if (!ValueInstantiator.class.isAssignableFrom(cls)) {
545
+ throw new IllegalStateException("Invalid instantiator Class<?> returned for type "+beanDesc+": "
546
+ +cls.getName()+" not a ValueInstantiator");
547
+ }
548
+ @SuppressWarnings("unchecked")
549
+ Class<? extends ValueInstantiator> instClass = (Class<? extends ValueInstantiator>) cls;
550
+ instantiator = config.valueInstantiatorInstance(ac, (Class<? extends ValueInstantiator>)instClass);
551
+ }
552
+ } else {
553
+ instantiator = constructDefaultValueInstantiator(config, beanDesc);
554
+ }
555
+
556
+ // finally: anyone want to modify ValueInstantiator?
557
+ if (_factoryConfig.hasValueInstantiators()) {
558
+ for (ValueInstantiators insts : _factoryConfig.valueInstantiators()) {
559
+ instantiator = insts.findValueInstantiator(config, beanDesc, instantiator);
560
+ // let's do sanity check; easier to spot buggy handlers
561
+ if (instantiator == null) {
562
+ throw new JsonMappingException("Broken registered ValueInstantiators (of type "
563
+ +insts.getClass().getName()+"): returned null ValueInstantiator");
564
+ }
565
+ }
566
+ }
567
+
568
+ return instantiator;
569
+ }
570
+
571
+ /**
572
+ * Method that {@link DeserializerProvider}s call to create a new
573
+ * deserializer for types other than Collections, Maps, arrays and
574
+ * enums.
575
+ */
576
+ @Override
577
+ public JsonDeserializer<Object> createBeanDeserializer(DeserializationConfig config,
578
+ DeserializerProvider p, JavaType type, BeanProperty property)
579
+ throws JsonMappingException
580
+ {
581
+ // First things first: abstract types may use defaulting:
582
+ if (type.isAbstract()) {
583
+ type = mapAbstractType(config, type);
584
+ }
585
+
586
+ // First things first: maybe explicit definition via annotations?
587
+ BasicBeanDescription beanDesc = config.introspect(type);
588
+ JsonDeserializer<Object> ad = findDeserializerFromAnnotation(config, beanDesc.getClassInfo(), property);
589
+ if (ad != null) {
590
+ return ad;
591
+ }
592
+ // Or value annotation that indicates more specific type to use:
593
+ JavaType newType = modifyTypeByAnnotation(config, beanDesc.getClassInfo(), type, null);
594
+ if (newType.getRawClass() != type.getRawClass()) {
595
+ type = newType;
596
+ beanDesc = config.introspect(type);
597
+ }
598
+ // We may also have custom overrides:
599
+ JsonDeserializer<Object> custom = _findCustomBeanDeserializer(type, config, p, beanDesc, property);
600
+ if (custom != null) {
601
+ return custom;
602
+ }
603
+ /* One more thing to check: do we have an exception type
604
+ * (Throwable or its sub-classes)? If so, need slightly
605
+ * different handling.
606
+ */
607
+ if (type.isThrowable()) {
608
+ return buildThrowableDeserializer(config, type, beanDesc, property);
609
+ }
610
+ /* Or, for abstract types, may have alternate means for resolution
611
+ * (defaulting, materialization)
612
+ */
613
+ if (type.isAbstract()) {
614
+ // [JACKSON-41] (v1.6): Let's make it possible to materialize abstract types.
615
+ JavaType concreteType = materializeAbstractType(config, beanDesc);
616
+ if (concreteType != null) {
617
+ /* important: introspect actual implementation (abstract class or
618
+ * interface doesn't have constructors, for one)
619
+ */
620
+ beanDesc = config.introspect(concreteType);
621
+ return buildBeanDeserializer(config, concreteType, beanDesc, property);
622
+ }
623
+ }
624
+
625
+ // Otherwise, may want to check handlers for standard types, from superclass:
626
+ JsonDeserializer<Object> deser = findStdBeanDeserializer(config, p, type, property);
627
+ if (deser != null) {
628
+ return deser;
629
+ }
630
+
631
+ // Otherwise: could the class be a Bean class? If not, bail out
632
+ if (!isPotentialBeanType(type.getRawClass())) {
633
+ return null;
634
+ }
635
+ // Use generic bean introspection to build deserializer
636
+ return buildBeanDeserializer(config, type, beanDesc, property);
637
+ }
638
+
639
+ /**
640
+ * Method that will find abstract type mapping for specified type, doing a single
641
+ * lookup through registered abstract type resolvers; will not do recursive lookups.
642
+ */
643
+ protected JavaType _mapAbstractType2(DeserializationConfig config, JavaType type)
644
+ throws JsonMappingException
645
+ {
646
+ Class<?> currClass = type.getRawClass();
647
+ if (_factoryConfig.hasAbstractTypeResolvers()) {
648
+ for (AbstractTypeResolver resolver : _factoryConfig.abstractTypeResolvers()) {
649
+ JavaType concrete = resolver.findTypeMapping(config, type);
650
+ if (concrete != null && concrete.getRawClass() != currClass) {
651
+ return concrete;
652
+ }
653
+ }
654
+ }
655
+ return null;
656
+ }
657
+
658
+ protected JavaType materializeAbstractType(DeserializationConfig config,
659
+ BasicBeanDescription beanDesc)
660
+ throws JsonMappingException
661
+ {
662
+ final JavaType abstractType = beanDesc.getType();
663
+
664
+ /* [JACKSON-502] (1.8): Now it is possible to have multiple resolvers too,
665
+ * as they are registered via module interface.
666
+ */
667
+ for (AbstractTypeResolver r : _factoryConfig.abstractTypeResolvers()) {
668
+ JavaType concrete = r.resolveAbstractType(config, abstractType);
669
+ if (concrete != null) {
670
+ return concrete;
671
+ }
672
+ }
673
+ return null;
674
+ }
675
+
676
+ /*
677
+ /**********************************************************
678
+ /* Public construction method beyond DeserializerFactory API:
679
+ /* can be called from outside as well as overridden by
680
+ /* sub-classes
681
+ /**********************************************************
682
+ */
683
+
684
+ /**
685
+ * Method that is to actually build a bean deserializer instance.
686
+ * All basic sanity checks have been done to know that what we have
687
+ * may be a valid bean type, and that there are no default simple
688
+ * deserializers.
689
+ */
690
+ @SuppressWarnings("unchecked")
691
+ public JsonDeserializer<Object> buildBeanDeserializer(DeserializationConfig config,
692
+ JavaType type, BasicBeanDescription beanDesc, BeanProperty property)
693
+ throws JsonMappingException
694
+ {
695
+ // First: check what creators we can use, if any
696
+ ValueInstantiator valueInstantiator = findValueInstantiator(config, beanDesc);
697
+ // ... since often we have nothing to go on, if we have abstract type:
698
+ if (type.isAbstract()) {
699
+ if (!valueInstantiator.canInstantiate()) {
700
+ // and if so, need placeholder deserializer
701
+ return new AbstractDeserializer(type);
702
+ }
703
+ }
704
+ BeanDeserializerBuilder builder = constructBeanDeserializerBuilder(beanDesc);
705
+ builder.setValueInstantiator(valueInstantiator);
706
+ // And then setters for deserializing from JSON Object
707
+ addBeanProps(config, beanDesc, builder);
708
+ // managed/back reference fields/setters need special handling... first part
709
+ addReferenceProperties(config, beanDesc, builder);
710
+ addInjectables(config, beanDesc, builder);
711
+
712
+ // [JACKSON-440]: update builder now that all information is in?
713
+ if (_factoryConfig.hasDeserializerModifiers()) {
714
+ for (BeanDeserializerModifier mod : _factoryConfig.deserializerModifiers()) {
715
+ builder = mod.updateBuilder(config, beanDesc, builder);
716
+ }
717
+ }
718
+ JsonDeserializer<?> deserializer = builder.build(property);
719
+
720
+ // [JACKSON-440]: may have modifier(s) that wants to modify or replace serializer we just built:
721
+ if (_factoryConfig.hasDeserializerModifiers()) {
722
+ for (BeanDeserializerModifier mod : _factoryConfig.deserializerModifiers()) {
723
+ deserializer = mod.modifyDeserializer(config, beanDesc, deserializer);
724
+ }
725
+ }
726
+ return (JsonDeserializer<Object>) deserializer;
727
+
728
+ }
729
+
730
+ @SuppressWarnings("unchecked")
731
+ public JsonDeserializer<Object> buildThrowableDeserializer(DeserializationConfig config,
732
+ JavaType type, BasicBeanDescription beanDesc, BeanProperty property)
733
+ throws JsonMappingException
734
+ {
735
+ // first: construct like a regular bean deserializer...
736
+ BeanDeserializerBuilder builder = constructBeanDeserializerBuilder(beanDesc);
737
+ builder.setValueInstantiator(findValueInstantiator(config, beanDesc));
738
+
739
+ addBeanProps(config, beanDesc, builder);
740
+ // (and assume there won't be any back references)
741
+
742
+ // But then let's decorate things a bit
743
+ /* To resolve [JACKSON-95], need to add "initCause" as setter
744
+ * for exceptions (sub-classes of Throwable).
745
+ */
746
+ AnnotatedMethod am = beanDesc.findMethod("initCause", INIT_CAUSE_PARAMS);
747
+ if (am != null) { // should never be null
748
+ SettableBeanProperty prop = constructSettableProperty(config, beanDesc, "cause", am);
749
+ if (prop != null) {
750
+ /* 21-Aug-2011, tatus: We may actually have found 'cause' property
751
+ * to set (with new 1.9 code)... but let's replace it just in case,
752
+ * otherwise can end up with odd errors.
753
+ */
754
+ builder.addOrReplaceProperty(prop, true);
755
+ }
756
+ }
757
+
758
+ // And also need to ignore "localizedMessage"
759
+ builder.addIgnorable("localizedMessage");
760
+ /* As well as "message": it will be passed via constructor,
761
+ * as there's no 'setMessage()' method
762
+ */
763
+ builder.addIgnorable("message");
764
+
765
+ // [JACKSON-440]: update builder now that all information is in?
766
+ if (_factoryConfig.hasDeserializerModifiers()) {
767
+ for (BeanDeserializerModifier mod : _factoryConfig.deserializerModifiers()) {
768
+ builder = mod.updateBuilder(config, beanDesc, builder);
769
+ }
770
+ }
771
+ JsonDeserializer<?> deserializer = builder.build(property);
772
+
773
+ /* At this point it ought to be a BeanDeserializer; if not, must assume
774
+ * it's some other thing that can handle deserialization ok...
775
+ */
776
+ if (deserializer instanceof BeanDeserializer) {
777
+ deserializer = new ThrowableDeserializer((BeanDeserializer) deserializer);
778
+ }
779
+
780
+ // [JACKSON-440]: may have modifier(s) that wants to modify or replace serializer we just built:
781
+ if (_factoryConfig.hasDeserializerModifiers()) {
782
+ for (BeanDeserializerModifier mod : _factoryConfig.deserializerModifiers()) {
783
+ deserializer = mod.modifyDeserializer(config, beanDesc, deserializer);
784
+ }
785
+ }
786
+ return (JsonDeserializer<Object>) deserializer;
787
+ }
788
+
789
+ /*
790
+ /**********************************************************
791
+ /* Helper methods for Bean deserializer construction,
792
+ /* overridable by sub-classes
793
+ /**********************************************************
794
+ */
795
+
796
+ /**
797
+ * Overridable method that constructs a {@link BeanDeserializerBuilder}
798
+ * which is used to accumulate information needed to create deserializer
799
+ * instance.
800
+ *
801
+ * @since 1.7
802
+ */
803
+ protected BeanDeserializerBuilder constructBeanDeserializerBuilder(BasicBeanDescription beanDesc) {
804
+ return new BeanDeserializerBuilder(beanDesc);
805
+ }
806
+
807
+ /**
808
+ * Method that will construct standard default {@link ValueInstantiator}
809
+ * using annotations (like @JsonCreator) and visibility rules
810
+ *
811
+ * @since 1.9
812
+ */
813
+ protected ValueInstantiator constructDefaultValueInstantiator(DeserializationConfig config,
814
+ BasicBeanDescription beanDesc)
815
+ throws JsonMappingException
816
+ {
817
+ boolean fixAccess = config.isEnabled(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS);
818
+ CreatorCollector creators = new CreatorCollector(beanDesc, fixAccess);
819
+ AnnotationIntrospector intr = config.getAnnotationIntrospector();
820
+
821
+ // First, let's figure out constructor/factory-based instantiation
822
+ // 23-Jan-2010, tatus: but only for concrete types
823
+ if (beanDesc.getType().isConcrete()) {
824
+ AnnotatedConstructor defaultCtor = beanDesc.findDefaultConstructor();
825
+ if (defaultCtor != null) {
826
+ if (fixAccess) {
827
+ ClassUtil.checkAndFixAccess(defaultCtor.getAnnotated());
828
+ }
829
+ creators.setDefaultConstructor(defaultCtor);
830
+ }
831
+ }
832
+
833
+ // need to construct suitable visibility checker:
834
+ VisibilityChecker<?> vchecker = config.getDefaultVisibilityChecker();
835
+ vchecker = config.getAnnotationIntrospector().findAutoDetectVisibility(beanDesc.getClassInfo(), vchecker);
836
+
837
+ /* Important: first add factory methods; then constructors, so
838
+ * latter can override former!
839
+ */
840
+ _addDeserializerFactoryMethods(config, beanDesc, vchecker, intr, creators);
841
+ _addDeserializerConstructors(config, beanDesc, vchecker, intr, creators);
842
+
843
+ return creators.constructValueInstantiator(config);
844
+ }
845
+
846
+ protected void _addDeserializerConstructors
847
+ (DeserializationConfig config, BasicBeanDescription beanDesc, VisibilityChecker<?> vchecker,
848
+ AnnotationIntrospector intr, CreatorCollector creators)
849
+ throws JsonMappingException
850
+ {
851
+ for (AnnotatedConstructor ctor : beanDesc.getConstructors()) {
852
+ int argCount = ctor.getParameterCount();
853
+ if (argCount < 1) {
854
+ continue;
855
+ }
856
+ boolean isCreator = intr.hasCreatorAnnotation(ctor);
857
+ boolean isVisible = vchecker.isCreatorVisible(ctor);
858
+ // some single-arg constructors (String, number) are auto-detected
859
+ if (argCount == 1) {
860
+ _handleSingleArgumentConstructor(config, beanDesc, vchecker, intr, creators,
861
+ ctor, isCreator, isVisible);
862
+ continue;
863
+ }
864
+ if (!isCreator && !isVisible) {
865
+ continue;
866
+ }
867
+ // [JACKSON-541] improved handling a bit so:
868
+ // 2 or more args; all params must have name annotations
869
+ // ... or @JacksonInject (or equivalent)
870
+ // But if it was auto-detected and there's no annotations, keep silent (was not meant to be a creator?)
871
+ boolean annotationFound = false;
872
+ /* [JACKSON-712] One more possibility; can have 1 or more injectables, and
873
+ * exactly one non-annotated parameter: if so, it's still delegating.
874
+ */
875
+ AnnotatedParameter nonAnnotatedParam = null;
876
+ int namedCount = 0;
877
+ int injectCount = 0;
878
+ CreatorProperty[] properties = new CreatorProperty[argCount];
879
+ for (int i = 0; i < argCount; ++i) {
880
+ AnnotatedParameter param = ctor.getParameter(i);
881
+ String name = (param == null) ? null : intr.findPropertyNameForParam(param);
882
+ Object injectId = intr.findInjectableValueId(param);
883
+ if (name != null && name.length() > 0) {
884
+ ++namedCount;
885
+ properties[i] = constructCreatorProperty(config, beanDesc, name, i, param, injectId);
886
+ } else if (injectId != null) {
887
+ ++injectCount;
888
+ properties[i] = constructCreatorProperty(config, beanDesc, name, i, param, injectId);
889
+ } else if (nonAnnotatedParam == null) {
890
+ nonAnnotatedParam = param;
891
+ }
892
+ }
893
+
894
+ // Ok: if named or injectable, we have more work to do
895
+ if (isCreator || namedCount > 0 || injectCount > 0) {
896
+ // simple case; everything covered:
897
+ if ((namedCount + injectCount) == argCount) {
898
+ creators.addPropertyCreator(ctor, properties);
899
+ } else if ((namedCount == 0) && ((injectCount + 1) == argCount)) {
900
+ // secondary: all but one injectable, one un-annotated (un-named)
901
+ // [JACKSON-712] SHOULD support; but we won't yet (tricky to do, not impossible)
902
+ throw new IllegalArgumentException("Delegated constructor with Injectables not yet supported (see [JACKSON-712]) for "
903
+ +ctor);
904
+ } else { // otherwise, epic fail
905
+ throw new IllegalArgumentException("Argument #"+nonAnnotatedParam.getIndex()+" of constructor "+ctor+" has no property name annotation; must have name when multiple-paramater constructor annotated as Creator");
906
+ }
907
+ }
908
+ if (annotationFound) {
909
+ creators.addPropertyCreator(ctor, properties);
910
+ }
911
+ }
912
+ }
913
+
914
+ protected boolean _handleSingleArgumentConstructor(DeserializationConfig config,
915
+ BasicBeanDescription beanDesc, VisibilityChecker<?> vchecker,
916
+ AnnotationIntrospector intr, CreatorCollector creators,
917
+ AnnotatedConstructor ctor, boolean isCreator, boolean isVisible)
918
+ throws JsonMappingException
919
+ {
920
+ // note: if we do have parameter name, it'll be "property constructor":
921
+ AnnotatedParameter param = ctor.getParameter(0);
922
+ String name = intr.findPropertyNameForParam(param);
923
+ Object injectId = intr.findInjectableValueId(param);
924
+
925
+ if ((injectId != null) || (name != null && name.length() > 0)) { // property-based
926
+ // We know there's a name and it's only 1 parameter.
927
+ CreatorProperty[] properties = new CreatorProperty[1];
928
+ properties[0] = constructCreatorProperty(config, beanDesc, name, 0, param, injectId);
929
+ creators.addPropertyCreator(ctor, properties);
930
+ return true;
931
+ }
932
+
933
+ // otherwise either 'simple' number, String, or general delegate:
934
+ Class<?> type = ctor.getParameterClass(0);
935
+ if (type == String.class) {
936
+ if (isCreator || isVisible) {
937
+ creators.addStringCreator(ctor);
938
+ }
939
+ return true;
940
+ }
941
+ if (type == int.class || type == Integer.class) {
942
+ if (isCreator || isVisible) {
943
+ creators.addIntCreator(ctor);
944
+ }
945
+ return true;
946
+ }
947
+ if (type == long.class || type == Long.class) {
948
+ if (isCreator || isVisible) {
949
+ creators.addLongCreator(ctor);
950
+ }
951
+ return true;
952
+ }
953
+ if (type == double.class || type == Double.class) {
954
+ if (isCreator || isVisible) {
955
+ creators.addDoubleCreator(ctor);
956
+ }
957
+ return true;
958
+ }
959
+
960
+ // Delegating Creator ok iff it has @JsonCreator (etc)
961
+ if (isCreator) {
962
+ creators.addDelegatingCreator(ctor);
963
+ return true;
964
+ }
965
+ return false;
966
+ }
967
+
968
+ protected void _addDeserializerFactoryMethods
969
+ (DeserializationConfig config, BasicBeanDescription beanDesc, VisibilityChecker<?> vchecker,
970
+ AnnotationIntrospector intr, CreatorCollector creators)
971
+ throws JsonMappingException
972
+ {
973
+
974
+ for (AnnotatedMethod factory : beanDesc.getFactoryMethods()) {
975
+ int argCount = factory.getParameterCount();
976
+ if (argCount < 1) {
977
+ continue;
978
+ }
979
+ boolean isCreator = intr.hasCreatorAnnotation(factory);
980
+ // some single-arg factory methods (String, number) are auto-detected
981
+ if (argCount == 1) {
982
+ AnnotatedParameter param = factory.getParameter(0);
983
+ String name = intr.findPropertyNameForParam(param);
984
+ Object injectId = intr.findInjectableValueId(param);
985
+
986
+ if ((injectId == null) && (name == null || name.length() == 0)) { // not property based
987
+ _handleSingleArgumentFactory(config, beanDesc, vchecker, intr, creators,
988
+ factory, isCreator);
989
+ // otherwise just ignored
990
+ continue;
991
+ }
992
+ // fall through if there's name
993
+ } else {
994
+ // more than 2 args, must be @JsonCreator
995
+ if (!intr.hasCreatorAnnotation(factory)) {
996
+ continue;
997
+ }
998
+ }
999
+ // 1 or more args; all params must have name annotations
1000
+ CreatorProperty[] properties = new CreatorProperty[argCount];
1001
+ for (int i = 0; i < argCount; ++i) {
1002
+ AnnotatedParameter param = factory.getParameter(i);
1003
+ String name = intr.findPropertyNameForParam(param);
1004
+ Object injectableId = intr.findInjectableValueId(param);
1005
+ // At this point, name annotation is NOT optional
1006
+ if ((name == null || name.length() == 0) && (injectableId == null)) {
1007
+ throw new IllegalArgumentException("Argument #"+i+" of factory method "+factory+" has no property name annotation; must have when multiple-paramater static method annotated as Creator");
1008
+ }
1009
+ properties[i] = constructCreatorProperty(config, beanDesc, name, i, param, injectableId);
1010
+ }
1011
+ creators.addPropertyCreator(factory, properties);
1012
+ }
1013
+ }
1014
+
1015
+ protected boolean _handleSingleArgumentFactory(DeserializationConfig config,
1016
+ BasicBeanDescription beanDesc, VisibilityChecker<?> vchecker,
1017
+ AnnotationIntrospector intr, CreatorCollector creators,
1018
+ AnnotatedMethod factory, boolean isCreator)
1019
+ throws JsonMappingException
1020
+ {
1021
+ Class<?> type = factory.getParameterClass(0);
1022
+
1023
+ if (type == String.class) {
1024
+ if (isCreator || vchecker.isCreatorVisible(factory)) {
1025
+ creators.addStringCreator(factory);
1026
+ }
1027
+ return true;
1028
+ }
1029
+ if (type == int.class || type == Integer.class) {
1030
+ if (isCreator || vchecker.isCreatorVisible(factory)) {
1031
+ creators.addIntCreator(factory);
1032
+ }
1033
+ return true;
1034
+ }
1035
+ if (type == long.class || type == Long.class) {
1036
+ if (isCreator || vchecker.isCreatorVisible(factory)) {
1037
+ creators.addLongCreator(factory);
1038
+ }
1039
+ return true;
1040
+ }
1041
+ if (type == double.class || type == Double.class) {
1042
+ if (isCreator || vchecker.isCreatorVisible(factory)) {
1043
+ creators.addDoubleCreator(factory);
1044
+ }
1045
+ return true;
1046
+ }
1047
+ if (type == boolean.class || type == Boolean.class) {
1048
+ if (isCreator || vchecker.isCreatorVisible(factory)) {
1049
+ creators.addBooleanCreator(factory);
1050
+ }
1051
+ return true;
1052
+ }
1053
+ if (intr.hasCreatorAnnotation(factory)) {
1054
+ creators.addDelegatingCreator(factory);
1055
+ return true;
1056
+ }
1057
+ return false;
1058
+ }
1059
+
1060
+ /**
1061
+ * Method that will construct a property object that represents
1062
+ * a logical property passed via Creator (constructor or static
1063
+ * factory method)
1064
+ */
1065
+ protected CreatorProperty constructCreatorProperty(DeserializationConfig config,
1066
+ BasicBeanDescription beanDesc, String name, int index,
1067
+ AnnotatedParameter param,
1068
+ Object injectableValueId)
1069
+ throws JsonMappingException
1070
+ {
1071
+ JavaType t0 = config.getTypeFactory().constructType(param.getParameterType(), beanDesc.bindingsForBeanType());
1072
+ BeanProperty.Std property = new BeanProperty.Std(name, t0, beanDesc.getClassAnnotations(), param);
1073
+ JavaType type = resolveType(config, beanDesc, t0, param, property);
1074
+ if (type != t0) {
1075
+ property = property.withType(type);
1076
+ }
1077
+ // Is there an annotation that specifies exact deserializer?
1078
+ JsonDeserializer<Object> deser = findDeserializerFromAnnotation(config, param, property);
1079
+ // If yes, we are mostly done:
1080
+ type = modifyTypeByAnnotation(config, param, type, name);
1081
+
1082
+ // Type deserializer: either comes from property (and already resolved)
1083
+ TypeDeserializer typeDeser = (TypeDeserializer) type.getTypeHandler();
1084
+ // or if not, based on type being referenced:
1085
+ if (typeDeser == null) {
1086
+ typeDeser = findTypeDeserializer(config, type, property);
1087
+ }
1088
+ CreatorProperty prop = new CreatorProperty(name, type, typeDeser,
1089
+ beanDesc.getClassAnnotations(), param, index, injectableValueId);
1090
+ if (deser != null) {
1091
+ prop = prop.withValueDeserializer(deser);
1092
+ }
1093
+ return prop;
1094
+ }
1095
+
1096
+ /**
1097
+ * Method called to figure out settable properties for the
1098
+ * bean deserializer to use.
1099
+ *<p>
1100
+ * Note: designed to be overridable, and effort is made to keep interface
1101
+ * similar between versions.
1102
+ */
1103
+ protected void addBeanProps(DeserializationConfig config,
1104
+ BasicBeanDescription beanDesc, BeanDeserializerBuilder builder)
1105
+ throws JsonMappingException
1106
+ {
1107
+ List<BeanPropertyDefinition> props = beanDesc.findProperties();
1108
+ // Things specified as "ok to ignore"? [JACKSON-77]
1109
+ AnnotationIntrospector intr = config.getAnnotationIntrospector();
1110
+ boolean ignoreAny = false;
1111
+ {
1112
+ Boolean B = intr.findIgnoreUnknownProperties(beanDesc.getClassInfo());
1113
+ if (B != null) {
1114
+ ignoreAny = B.booleanValue();
1115
+ builder.setIgnoreUnknownProperties(ignoreAny);
1116
+ }
1117
+ }
1118
+ // Or explicit/implicit definitions?
1119
+ Set<String> ignored = ArrayBuilders.arrayToSet(intr.findPropertiesToIgnore(beanDesc.getClassInfo()));
1120
+ for (String propName : ignored) {
1121
+ builder.addIgnorable(propName);
1122
+ }
1123
+ AnnotatedMethod anySetter = beanDesc.findAnySetter();
1124
+ // Implicit ones via @JsonIgnore and equivalent?
1125
+ /* 26-Dec-2011, tatu: As per [JACKSON-744], it probably does NOT make
1126
+ * sense to consider ignorable, esp. now that both getters and setters
1127
+ * can induce ignoral.
1128
+ */
1129
+ {
1130
+ Collection<String> ignored2 = (anySetter == null) ?
1131
+ beanDesc.getIgnoredPropertyNames() : beanDesc.getIgnoredPropertyNamesForDeser();
1132
+ if (ignored2 != null) {
1133
+ for (String propName : ignored2) {
1134
+ // allow ignoral of similarly named JSON property, but do not force;
1135
+ // latter means NOT adding this to 'ignored':
1136
+ builder.addIgnorable(propName);
1137
+ }
1138
+ }
1139
+ }
1140
+ HashMap<Class<?>,Boolean> ignoredTypes = new HashMap<Class<?>,Boolean>();
1141
+
1142
+ // These are all valid setters, but we do need to introspect bit more
1143
+ for (BeanPropertyDefinition property : props) {
1144
+ String name = property.getName();
1145
+ if (ignored.contains(name)) { // explicit ignoral using @JsonIgnoreProperties needs to block entries
1146
+ continue;
1147
+ }
1148
+ /* [JACKSON-700] If property as passed via constructor parameter, we must
1149
+ * handle things in special way. Not sure what is the most optimal way...
1150
+ * for now, let's just call a (new) method in builder, which does nothing.
1151
+ */
1152
+ if (property.hasConstructorParameter()) {
1153
+ // but let's call a method just to allow custom builders to be aware...
1154
+ builder.addCreatorProperty(property);
1155
+ continue;
1156
+ }
1157
+ // primary: have a setter?
1158
+ if (property.hasSetter()) {
1159
+ AnnotatedMethod setter = property.getSetter();
1160
+ // [JACKSON-429] Some types are declared as ignorable as well
1161
+ Class<?> type = setter.getParameterClass(0);
1162
+ if (isIgnorableType(config, beanDesc, type, ignoredTypes)) {
1163
+ // important: make ignorable, to avoid errors if value is actually seen
1164
+ builder.addIgnorable(name);
1165
+ continue;
1166
+ }
1167
+ SettableBeanProperty prop = constructSettableProperty(config, beanDesc, name, setter);
1168
+ if (prop != null) {
1169
+ builder.addProperty(prop);
1170
+ }
1171
+ continue;
1172
+ }
1173
+ if (property.hasField()) {
1174
+ AnnotatedField field = property.getField();
1175
+ // [JACKSON-429] Some types are declared as ignorable as well
1176
+ Class<?> type = field.getRawType();
1177
+ if (isIgnorableType(config, beanDesc, type, ignoredTypes)) {
1178
+ // important: make ignorable, to avoid errors if value is actually seen
1179
+ builder.addIgnorable(name);
1180
+ continue;
1181
+ }
1182
+ SettableBeanProperty prop = constructSettableProperty(config, beanDesc, name, field);
1183
+ if (prop != null) {
1184
+ builder.addProperty(prop);
1185
+ }
1186
+ }
1187
+ }
1188
+ // Also, do we have a fallback "any" setter?
1189
+ if (anySetter != null) {
1190
+ builder.setAnySetter(constructAnySetter(config, beanDesc, anySetter));
1191
+ }
1192
+
1193
+ /* As per [JACKSON-88], may also need to consider getters
1194
+ * for Map/Collection properties
1195
+ */
1196
+ /* also, as per [JACKSON-328], should not override fields (or actual setters),
1197
+ * thus these are added AFTER adding fields
1198
+ */
1199
+ if (config.isEnabled(DeserializationConfig.Feature.USE_GETTERS_AS_SETTERS)) {
1200
+ /* Hmmh. We have to assume that 'use getters as setters' also
1201
+ * implies 'yes, do auto-detect these getters'? (if not, we'd
1202
+ * need to add AUTO_DETECT_GETTERS to deser config too, not
1203
+ * just ser config)
1204
+ */
1205
+ for (BeanPropertyDefinition property : props) {
1206
+ if (property.hasGetter()) {
1207
+ String name = property.getName();
1208
+ if (builder.hasProperty(name) || ignored.contains(name)) {
1209
+ continue;
1210
+ }
1211
+ AnnotatedMethod getter = property.getGetter();
1212
+ // should only consider Collections and Maps, for now?
1213
+ Class<?> rt = getter.getRawType();
1214
+ if (Collection.class.isAssignableFrom(rt) || Map.class.isAssignableFrom(rt)) {
1215
+ if (!ignored.contains(name) && !builder.hasProperty(name)) {
1216
+ builder.addProperty(constructSetterlessProperty(config, beanDesc, name, getter));
1217
+ }
1218
+ }
1219
+ }
1220
+ }
1221
+ }
1222
+ }
1223
+
1224
+ /**
1225
+ * Method that will find if bean has any managed- or back-reference properties,
1226
+ * and if so add them to bean, to be linked during resolution phase.
1227
+ *
1228
+ * @since 1.6
1229
+ */
1230
+ protected void addReferenceProperties(DeserializationConfig config,
1231
+ BasicBeanDescription beanDesc, BeanDeserializerBuilder builder)
1232
+ throws JsonMappingException
1233
+ {
1234
+ // and then back references, not necessarily found as regular properties
1235
+ Map<String,AnnotatedMember> refs = beanDesc.findBackReferenceProperties();
1236
+ if (refs != null) {
1237
+ for (Map.Entry<String, AnnotatedMember> en : refs.entrySet()) {
1238
+ String name = en.getKey();
1239
+ AnnotatedMember m = en.getValue();
1240
+ if (m instanceof AnnotatedMethod) {
1241
+ builder.addBackReferenceProperty(name, constructSettableProperty(
1242
+ config, beanDesc, m.getName(), (AnnotatedMethod) m));
1243
+ } else {
1244
+ builder.addBackReferenceProperty(name, constructSettableProperty(
1245
+ config, beanDesc, m.getName(), (AnnotatedField) m));
1246
+ }
1247
+ }
1248
+ }
1249
+ }
1250
+
1251
+ /**
1252
+ * Method called locate all members used for value injection (if any),
1253
+ * constructor {@link sh.calaba.org.codehaus.jackson.map.deser.impl.ValueInjector} instances, and add them to builder.
1254
+ *
1255
+ * @since 1.9
1256
+ */
1257
+ protected void addInjectables(DeserializationConfig config,
1258
+ BasicBeanDescription beanDesc, BeanDeserializerBuilder builder)
1259
+ throws JsonMappingException
1260
+ {
1261
+ Map<Object, AnnotatedMember> raw = beanDesc.findInjectables();
1262
+ if (raw != null) {
1263
+ boolean fixAccess = config.isEnabled(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS);
1264
+ for (Map.Entry<Object, AnnotatedMember> entry : raw.entrySet()) {
1265
+ AnnotatedMember m = entry.getValue();
1266
+ if (fixAccess) {
1267
+ m.fixAccess(); // to ensure we can call it
1268
+ }
1269
+ builder.addInjectable(m.getName(), beanDesc.resolveType(m.getGenericType()),
1270
+ beanDesc.getClassAnnotations(), m, entry.getKey());
1271
+ }
1272
+ }
1273
+ }
1274
+
1275
+ /**
1276
+ * Method called to construct fallback {@link SettableAnyProperty}
1277
+ * for handling unknown bean properties, given a method that
1278
+ * has been designated as such setter.
1279
+ */
1280
+ protected SettableAnyProperty constructAnySetter(DeserializationConfig config,
1281
+ BasicBeanDescription beanDesc, AnnotatedMethod setter)
1282
+ throws JsonMappingException
1283
+ {
1284
+ if (config.isEnabled(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS)) {
1285
+ setter.fixAccess(); // to ensure we can call it
1286
+ }
1287
+ // we know it's a 2-arg method, second arg is the value
1288
+ JavaType type = beanDesc.bindingsForBeanType().resolveType(setter.getParameterType(1));
1289
+ BeanProperty.Std property = new BeanProperty.Std(setter.getName(), type, beanDesc.getClassAnnotations(), setter);
1290
+ type = resolveType(config, beanDesc, type, setter, property);
1291
+
1292
+ /* AnySetter can be annotated with @JsonClass (etc) just like a
1293
+ * regular setter... so let's see if those are used.
1294
+ * Returns null if no annotations, in which case binding will
1295
+ * be done at a later point.
1296
+ */
1297
+ JsonDeserializer<Object> deser = findDeserializerFromAnnotation(config, setter, property);
1298
+ if (deser != null) {
1299
+ return new SettableAnyProperty(property, setter, type, deser);
1300
+ }
1301
+ /* Otherwise, method may specify more specific (sub-)class for
1302
+ * value (no need to check if explicit deser was specified):
1303
+ */
1304
+ type = modifyTypeByAnnotation(config, setter, type, property.getName());
1305
+ return new SettableAnyProperty(property, setter, type, null);
1306
+ }
1307
+
1308
+ /**
1309
+ * Method that will construct a regular bean property setter using
1310
+ * the given setter method.
1311
+ *
1312
+ * @param setter Method to use to set property value; or null if none.
1313
+ * Null only for "setterless" properties
1314
+ *
1315
+ * @return Property constructed, if any; or null to indicate that
1316
+ * there should be no property based on given definitions.
1317
+ */
1318
+ protected SettableBeanProperty constructSettableProperty(DeserializationConfig config,
1319
+ BasicBeanDescription beanDesc, String name,
1320
+ AnnotatedMethod setter)
1321
+ throws JsonMappingException
1322
+ {
1323
+ // need to ensure method is callable (for non-public)
1324
+ if (config.isEnabled(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS)) {
1325
+ setter.fixAccess();
1326
+ }
1327
+
1328
+ // note: this works since we know there's exactly one argument for methods
1329
+ JavaType t0 = beanDesc.bindingsForBeanType().resolveType(setter.getParameterType(0));
1330
+ BeanProperty.Std property = new BeanProperty.Std(name, t0, beanDesc.getClassAnnotations(), setter);
1331
+ JavaType type = resolveType(config, beanDesc, t0, setter, property);
1332
+ // did type change?
1333
+ if (type != t0) {
1334
+ property = property.withType(type);
1335
+ }
1336
+
1337
+ /* First: does the Method specify the deserializer to use?
1338
+ * If so, let's use it.
1339
+ */
1340
+ JsonDeserializer<Object> propDeser = findDeserializerFromAnnotation(config, setter, property);
1341
+ type = modifyTypeByAnnotation(config, setter, type, name);
1342
+ TypeDeserializer typeDeser = type.getTypeHandler();
1343
+ SettableBeanProperty prop = new SettableBeanProperty.MethodProperty(name, type, typeDeser,
1344
+ beanDesc.getClassAnnotations(), setter);
1345
+ if (propDeser != null) {
1346
+ prop = prop.withValueDeserializer(propDeser);
1347
+ }
1348
+ // [JACKSON-235]: need to retain name of managed forward references:
1349
+ AnnotationIntrospector.ReferenceProperty ref = config.getAnnotationIntrospector().findReferenceType(setter);
1350
+ if (ref != null && ref.isManagedReference()) {
1351
+ prop.setManagedReferenceName(ref.getName());
1352
+ }
1353
+ return prop;
1354
+ }
1355
+
1356
+ protected SettableBeanProperty constructSettableProperty(DeserializationConfig config,
1357
+ BasicBeanDescription beanDesc, String name, AnnotatedField field)
1358
+ throws JsonMappingException
1359
+ {
1360
+ // need to ensure method is callable (for non-public)
1361
+ if (config.isEnabled(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS)) {
1362
+ field.fixAccess();
1363
+ }
1364
+ JavaType t0 = beanDesc.bindingsForBeanType().resolveType(field.getGenericType());
1365
+ BeanProperty.Std property = new BeanProperty.Std(name, t0, beanDesc.getClassAnnotations(), field);
1366
+ JavaType type = resolveType(config, beanDesc, t0, field, property);
1367
+ // did type change?
1368
+ if (type != t0) {
1369
+ property = property.withType(type);
1370
+ }
1371
+ /* First: does the Method specify the deserializer to use?
1372
+ * If so, let's use it.
1373
+ */
1374
+ JsonDeserializer<Object> propDeser = findDeserializerFromAnnotation(config, field, property);
1375
+ type = modifyTypeByAnnotation(config, field, type, name);
1376
+ TypeDeserializer typeDeser = type.getTypeHandler();
1377
+ SettableBeanProperty prop = new SettableBeanProperty.FieldProperty(name, type, typeDeser,
1378
+ beanDesc.getClassAnnotations(), field);
1379
+ if (propDeser != null) {
1380
+ prop = prop.withValueDeserializer(propDeser);
1381
+ }
1382
+ // [JACKSON-235]: need to retain name of managed forward references:
1383
+ AnnotationIntrospector.ReferenceProperty ref = config.getAnnotationIntrospector().findReferenceType(field);
1384
+ if (ref != null && ref.isManagedReference()) {
1385
+ prop.setManagedReferenceName(ref.getName());
1386
+ }
1387
+ return prop;
1388
+ }
1389
+
1390
+ /**
1391
+ * Method that will construct a regular bean property setter using
1392
+ * the given setter method.
1393
+ *
1394
+ * @param getter Method to use to get property value to modify, null if
1395
+ * none. Non-null for "setterless" properties.
1396
+ */
1397
+ protected SettableBeanProperty constructSetterlessProperty(DeserializationConfig config,
1398
+ BasicBeanDescription beanDesc, String name, AnnotatedMethod getter)
1399
+ throws JsonMappingException
1400
+ {
1401
+ // need to ensure it is callable now:
1402
+ if (config.isEnabled(DeserializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS)) {
1403
+ getter.fixAccess();
1404
+ }
1405
+
1406
+ JavaType type = getter.getType(beanDesc.bindingsForBeanType());
1407
+ /* First: does the Method specify the deserializer to use?
1408
+ * If so, let's use it.
1409
+ */
1410
+ BeanProperty.Std property = new BeanProperty.Std(name, type, beanDesc.getClassAnnotations(), getter);
1411
+ // @TODO: create BeanProperty to pass?
1412
+ JsonDeserializer<Object> propDeser = findDeserializerFromAnnotation(config, getter, property);
1413
+ type = modifyTypeByAnnotation(config, getter, type, name);
1414
+ TypeDeserializer typeDeser = type.getTypeHandler();
1415
+ SettableBeanProperty prop = new SettableBeanProperty.SetterlessProperty(name, type, typeDeser,
1416
+ beanDesc.getClassAnnotations(), getter);
1417
+ if (propDeser != null) {
1418
+ prop = prop.withValueDeserializer(propDeser);
1419
+ }
1420
+ return prop;
1421
+ }
1422
+
1423
+ /*
1424
+ /**********************************************************
1425
+ /* Helper methods for Bean deserializer, other
1426
+ /**********************************************************
1427
+ */
1428
+
1429
+ /**
1430
+ * Helper method used to skip processing for types that we know
1431
+ * can not be (i.e. are never consider to be) beans:
1432
+ * things like primitives, Arrays, Enums, and proxy types.
1433
+ *<p>
1434
+ * Note that usually we shouldn't really be getting these sort of
1435
+ * types anyway; but better safe than sorry.
1436
+ */
1437
+ protected boolean isPotentialBeanType(Class<?> type)
1438
+ {
1439
+ String typeStr = ClassUtil.canBeABeanType(type);
1440
+ if (typeStr != null) {
1441
+ throw new IllegalArgumentException("Can not deserialize Class "+type.getName()+" (of type "+typeStr+") as a Bean");
1442
+ }
1443
+ if (ClassUtil.isProxyType(type)) {
1444
+ throw new IllegalArgumentException("Can not deserialize Proxy class "+type.getName()+" as a Bean");
1445
+ }
1446
+ /* also: can't deserialize some local classes: static are ok; in-method not;
1447
+ * and with [JACKSON-594], other non-static inner classes are ok
1448
+ */
1449
+ typeStr = ClassUtil.isLocalType(type, true);
1450
+ if (typeStr != null) {
1451
+ throw new IllegalArgumentException("Can not deserialize Class "+type.getName()+" (of type "+typeStr+") as a Bean");
1452
+ }
1453
+ return true;
1454
+ }
1455
+
1456
+ /**
1457
+ * Helper method that will check whether given raw type is marked as always ignorable
1458
+ * (for purpose of ignoring properties with type)
1459
+ */
1460
+ protected boolean isIgnorableType(DeserializationConfig config, BasicBeanDescription beanDesc,
1461
+ Class<?> type, Map<Class<?>,Boolean> ignoredTypes)
1462
+ {
1463
+ Boolean status = ignoredTypes.get(type);
1464
+ if (status == null) {
1465
+ BasicBeanDescription desc = config.introspectClassAnnotations(type);
1466
+ status = config.getAnnotationIntrospector().isIgnorableType(desc.getClassInfo());
1467
+ // We default to 'false', ie. not ignorable
1468
+ if (status == null) {
1469
+ status = Boolean.FALSE;
1470
+ }
1471
+ }
1472
+ return status;
1473
+ }
1474
+ }