Home > Software design >  Spring yaml property java.util.LinkedHashMap cannot be cast to java.lang.String
Spring yaml property java.util.LinkedHashMap cannot be cast to java.lang.String

Time:02-17

I try to pass Docker env variable in my Spring boot application.yml like this:

  security:
    saml2:
      relyingparty:
        registration:
          my-saml:
            signing:
              credentials:
                - private-key-location: classpath:HARD_PATH_TO_KEY
                  certificate-location: classpath:HARD_PATH_TO_CERT
            identityprovider:
              verification.credentials:
                - certificate-location: classpath:HARD_PATH_TO_CERT
              entity-id: MY_ID
              singlesignon:
                url: {{saml.ip.singlesignon.url}}
                sign-request: true

But when I use env variable to

            - private-key-location: {{saml.ip.private.key}}
              certificate-location: {{saml.ip.certif.emp}}

and

          verification.credentials:
            - certificate-location: {{saml.ip.certif2.emp}}

I got this error:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.String
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
    at org.springframework.beans.factory.config.YamlProcessor.buildFlattenedMap(YamlProcessor.java:309)
    at org.springframework.beans.factory.config.YamlProcessor.lambda$buildFlattenedMap$1(YamlProcessor.java:325)
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
    at org.springframework.beans.factory.config.YamlProcessor.buildFlattenedMap(YamlProcessor.java:309)
    at org.springframework.beans.factory.config.YamlProcessor.lambda$buildFlattenedMap$1(YamlProcessor.java:325)
    at java.util.Collections$SingletonMap.forEach(Collections.java:4910)

 

Any idea

CodePudding user response:

Try to remove the '-' at the beginning of lines

          private-key-location: {{saml.ip.private.key}}
          certificate-location: {{saml.ip.certif.emp}}
          ...
          certificate-location: {{saml.ip.certif2.emp}}

CodePudding user response:

If you want 2 separate Strings, or credentials is a Map, I think it should be:

             credentials:
                 private-key-location: {{saml.ip.private.key}}
                 certificate-location: {{saml.ip.certif.emp}}

If you want an array, I think it should be:

             credentials:
                 - private-key-location: {{saml.ip.private.key}}
                 - certificate-location: {{saml.ip.certif.emp}}
  • Related