Search code examples
xmlspring-bootresttemplate

RestTemplate returns null fields for specified object


I have the following try block in which I am expecting a response from the exchange method of RestTemplate :

try{            
    response = restOperations.exchange("http://localhost:8080/midpoint/ws/rest/users/00000000-0000-0000-0000-000000000002",
            HttpMethod.GET,
            new HttpEntity<String>(createHeaders("administrator", "5ecr3t")), 
            UserType.class);

    logger.info(response.getBody());
}

I am expecting a response of type UserType, the request is executed correctly with a status of 200 OK, but all the fields of UserType model are null, so the response I am receiving from the REST call is not being bind (mapped). The required fields of UserType are annotated as:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "UserType", propOrder = {
    "fullName",
    "givenName",
    "familyName",
    "additionalNames",
    "locality",
    "assignment",
    "activation",
    "specialWithInternalizedName",
    "singleActivation", 
    "multiActivation",
    "multiActivationCopy",
    "singleConstruction",
    "multiConstruction",
    "multiConstructionCopy"
})

An example of the servers response:

<?xml version="1.0" encoding="UTF-8"?>
<user xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:icfs="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3" xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3" xmlns:t="http://prism.evolveum.com/xml/ns/public/types-3" oid="00000000-0000-0000-0000-000000000002" version="194">
   <name>administrator</name>
   <metadata>
      <requestTimestamp>2017-01-31T14:04:14.575+01:00</requestTimestamp>
      <createTimestamp>2017-01-31T14:04:14.658+01:00</createTimestamp>
      <createChannel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#init</createChannel>
   </metadata>
   <assignment id="1">
      <metadata>
         <requestTimestamp>2017-01-31T14:04:14.575+01:00</requestTimestamp>
         <createTimestamp>2017-01-31T14:04:14.658+01:00</createTimestamp>
         <createChannel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#init</createChannel>
      </metadata>
      <targetRef oid="00000000-0000-0000-0000-000000000004" type="c:RoleType" />
      <activation>
         <effectiveStatus>enabled</effectiveStatus>
      </activation>
   </assignment>
   <activation>
      <administrativeStatus>enabled</administrativeStatus>
      <effectiveStatus>enabled</effectiveStatus>
      <enableTimestamp>2017-01-31T14:04:14.598+01:00</enableTimestamp>
      <lockoutStatus>normal</lockoutStatus>
   </activation>
   <iteration>0</iteration>
   <iterationToken />
   <roleMembershipRef oid="00000000-0000-0000-0000-000000000004" type="c:RoleType" />
   <fullName>midPoint Administrator</fullName>
   <givenName>midPoint</givenName>
   <familyName>Administrator</familyName>
   <credentials>
      <password>
         <lastSuccessfulLogin>
            <timestamp>2017-02-16T17:01:21.861+01:00</timestamp>
         </lastSuccessfulLogin>
         <previousSuccessfulLogin>
            <timestamp>2017-02-16T16:44:00.493+01:00</timestamp>
         </previousSuccessfulLogin>
         <metadata>
            <createTimestamp>2017-01-31T14:04:14.598+01:00</createTimestamp>
            <createChannel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#init</createChannel>
         </metadata>
         <value>
            <t:encryptedData>
               <t:encryptionMethod>
                  <t:algorithm>http://www.w3.org/2001/04/xmlenc#aes128-cbc</t:algorithm>
               </t:encryptionMethod>
               <t:keyInfo>
                  <t:keyName>HZZUFItbX7fYQO41GT3PHJtIf2Q=</t:keyName>
               </t:keyInfo>
               <t:cipherData>
                  <t:cipherValue>SZusPiIgcrzoqDfm9uTzmrI6r4lG/OolTRIc7V/0aVo=</t:cipherValue>
               </t:cipherData>
            </t:encryptedData>
         </value>
      </password>
   </credentials>
</user>

Solution

  • I solve my problem adding the jackson dependency in my pom.xml file:

            <dependency>
                <groupId>com.fasterxml.jackson.dataformat</groupId>
                <artifactId>jackson-dataformat-xml</artifactId>
            </dependency>