diff --git a/midpoint-client-api/pom.xml b/midpoint-client-api/pom.xml index f8aa824..51e3977 100644 --- a/midpoint-client-api/pom.xml +++ b/midpoint-client-api/pom.xml @@ -33,5 +33,9 @@ <artifactId>schema-pure-jaxb</artifactId> <version>${midpoint.version}</version> </dependency> + <dependency> + <groupId>jakarta.ws.rs</groupId> + <artifactId>jakarta.ws.rs-api</artifactId> + </dependency> </dependencies> </project> diff --git a/midpoint-client-api/src/main/java/com/evolveum/midpoint/client/api/SearchResult.java b/midpoint-client-api/src/main/java/com/evolveum/midpoint/client/api/SearchResult.java index fc77e0c..911848f 100644 --- a/midpoint-client-api/src/main/java/com/evolveum/midpoint/client/api/SearchResult.java +++ b/midpoint-client-api/src/main/java/com/evolveum/midpoint/client/api/SearchResult.java @@ -19,10 +19,12 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import jakarta.ws.rs.core.MultivaluedMap; + /** * @author semancik * */ public interface SearchResult<O extends ObjectType> extends List<O> { - + MultivaluedMap<String, Object> getHeaders(); } diff --git a/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/JaxbSearchResult.java b/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/JaxbSearchResult.java index 9450202..9095355 100644 --- a/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/JaxbSearchResult.java +++ b/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/JaxbSearchResult.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.ListIterator; +import jakarta.ws.rs.core.MultivaluedMap; import org.apache.cxf.common.util.CollectionUtils; import com.evolveum.midpoint.client.api.SearchResult; @@ -34,6 +35,7 @@ public class JaxbSearchResult<O extends ObjectType> implements SearchResult<O> { private List<O> list = null; + private MultivaluedMap<String, Object> headers; public JaxbSearchResult() { } @@ -43,6 +45,16 @@ public JaxbSearchResult(List<O> list) { this.list = list; } + public JaxbSearchResult(List<O> list, MultivaluedMap<String, Object> headers) { + this.list = list; + this.headers = headers; + } + + @Override + public MultivaluedMap<String, Object> getHeaders() { + return headers; + } + @Override public int size() { if (list == null) { diff --git a/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/RestJaxbSearchService.java b/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/RestJaxbSearchService.java index a5e6f2c..b605895 100644 --- a/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/RestJaxbSearchService.java +++ b/midpoint-client-impl-rest-jaxb/src/main/java/com/evolveum/midpoint/client/impl/restjaxb/RestJaxbSearchService.java @@ -84,7 +84,7 @@ public SearchResult<O> get() throws ObjectNotFoundException { Response response = getService().post(path, query, queryParams); if (Status.OK.getStatusCode() == response.getStatus()) { - return new JaxbSearchResult<>(getSearchResultList(response)); + return new JaxbSearchResult<>(getSearchResultList(response), response.getHeaders()); } if (Status.NOT_FOUND.getStatusCode() == response.getStatus()) { diff --git a/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestBasic.java b/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestBasic.java index 1fb8957..5af3f9f 100644 --- a/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestBasic.java +++ b/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestBasic.java @@ -25,6 +25,7 @@ import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType; import com.evolveum.prism.xml.ns._public.types_3.ItemPathType; +import jakarta.ws.rs.core.MultivaluedMap; import org.apache.cxf.endpoint.Server; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -227,6 +228,15 @@ public void test014UserFilterQuerySearchMock() throws Exception { assertEquals(result.size(), 0); } + @Test + public void test015SearchResultResponseHeaders() throws Exception { + Service service = getService(); + + SearchResult<? extends ObjectType> searchResult = service.users().search().get(); + + MultivaluedMap<String, Object> responseHeaders = searchResult.getHeaders(); + assertNotNull(responseHeaders); + } @Test public void test011ValuePolicyGet() throws Exception { diff --git a/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestIntegrationBasic.java b/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestIntegrationBasic.java index 902e94b..b231d47 100644 --- a/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestIntegrationBasic.java +++ b/midpoint-client-impl-rest-jaxb/src/test/java/com/evolveum/midpoint/client/impl/restjaxb/TestIntegrationBasic.java @@ -25,6 +25,7 @@ import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType; import com.evolveum.prism.xml.ns._public.types_3.ItemPathType; +import jakarta.ws.rs.core.MultivaluedMap; import org.apache.commons.lang3.StringUtils; import org.testng.AssertJUnit; import org.testng.annotations.BeforeClass; @@ -414,6 +415,13 @@ public void test610searchUserFilterQuery() throws Exception { assertEquals(users.size(), 1); } + @Test + public void test615SearchResultResponseHeaders() throws Exception { + SearchResult<? extends ObjectType> searchResult = service.users().search().queryFor(UserType.class).get(); + + MultivaluedMap<String, Object> responseHeaders = searchResult.getHeaders(); + assertNotNull(responseHeaders); + } @Test public void test700addSecurityPolicy() throws Exception { diff --git a/pom.xml b/pom.xml index 97dbcfb..317469d 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,7 @@ <surefire.version>3.5.2</surefire.version> <jakarta.annotation.version>3.0.0</jakarta.annotation.version> <commons-lang3.version>3.17.0</commons-lang3.version> + <jakarta.ws.rs-api.version>4.0.0</jakarta.ws.rs-api.version> </properties> <scm> @@ -137,6 +138,11 @@ <artifactId>jakarta.xml.bind-impl</artifactId> <version>${jaxb.version}</version> </dependency> + <dependency> + <groupId>jakarta.ws.rs</groupId> + <artifactId>jakarta.ws.rs-api</artifactId> + <version>${jakarta.ws.rs-api.version}</version> + </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId>