I am new to YAML and have parse a YAML config file that looks like:
applications:
authentication:
service-version: 2.0
service-url: https://myapp.corp/auth
app-env: DEV
timeout-in-ms: 5000
enable-log: true
service1:
enable-log: true
auth-required: true
app-env: DEV
timeout-in-ms: 5000
service-url: https://myapp.corp/service1
service-name: SomeService1
service-version: 1.1
service-namespace: http://myapp.corp/ns/service1
service2:
enable-log: true
auth-required: true
app-env: DEV
timeout-in-ms: 5000
service-url: https://myapp.corp/service2
service-name: SomeService2
service-version: 2.0
service-namespace: http://myapp.corp/ns/service2
I have to parse to following Map
structure
+==================================+
| Key | |
+==================================+
| authentication | AuthConfig |
+----------------------------------+
| service1 | ServiceConfig |
+----------------------------------+
| service2 | ServiceConfig |
+----------------------------------+
AuthConfig
and ServiceConfig
are the custom objects in our system.
Can someone provide some hints how to do it?
So as you have the same properties in the Auth and Service configuration I simplified that in one class to show you here.
The YamlConfig class look like this:
And the the Parser logic is something like that :
I shared the full code in this gist: https://gist.github.com/marceldiass/f1d0e25671d7f47b24271f15c1066ea3
There is a package for Java called Jackson that handles mapping between YAML (and JSON, and CSV, and XML) and Java objects. Most examples you will come across are for JSON, but the YAML link shows that switching is straight-forward. Everything goes through an
ObjectMapper
:That can then be used to deserialize your object via reflection:
You would set up your classes something like this (I've made everything public for ease of example):
Notice the JsonProperty annotation which is renaming your Java field to YAML field. I find this the most convenient way of dealing with JSON and YAML in Java. I've also had to use the streaming API for really large objects.