On 11/05/2015 13:27, Colm O hEigeartaigh wrote:
Hi Francesco,
Thanks for your response. No special reason not to use the Syncope client
API as such, the code just comes from when I used the CXF WebClient Object
originally to play around with Syncope's REST API. Here is the code snippet
if you can spot anything obviously wrong:
String address = "http://localhost:9080/syncope/rest/";
WebClient client = WebClient.create(address, Collections.singletonList(new
JacksonJsonProvider())););
String authorizationHeader = "Basic " + Base64Utility.encode(("admin" + ":"
+ "password").getBytes());
client.header("Authorization", authorizationHeader);
// client.accept("application/xml"); // WORKS
client.accept("application/json"); // DOESN'T WORK
WebClient.getConfig(client).getInInterceptors().add(new
LoggingInInterceptor());
List<RoleTO> roles = new ArrayList<RoleTO>();
client = client.path("roles");
@SuppressWarnings("unchecked")
PagedResult<RoleTO> existingRoles =
(PagedResult<RoleTO>)client.get(PagedResult.class);
You need to replace this last statement with:
existingRoles = client.get(new
GenericType<PagedResult<RoleTO>>() {
});
I have just tried and I confirm it works.
Regards.
On Sun, May 10, 2015 at 6:05 AM, Francesco Chicchiriccò <[email protected]>
wrote:
On 10/05/2015 06:54, Francesco Chicchiriccò wrote:
On 08/05/2015 17:41, Colm O hEigeartaigh wrote:
Hi all,
We have some test code that uses Apache CXF's WebClient class to retrieve
roles from Syncope.
With Syncope 1.1.x, we could retrieve all roles as follows:
Collection<? extends RoleTO> existingRoles =
client.getCollection(RoleTO.class);
However, with Syncope 1.2.3 this does not work. I can get it working as
follows when I'm using XML:
PagedResult<RoleTO> pagedResult = client.get(PagedResult.class);
However, when using JSON (+ Jackson) I get the following error:
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not
construct
instance of org.apache.syncope.common.AbstractBaseBean, problem: abstract
types can only be instantiated with additional type information
at [Source: java.io.SequenceInputStream@66c677a7; line: 1, column: 69]
(through reference chain:
org.apache.syncope.common.reqres.PagedResult["result"])
Any ideas on how I can get the results here using JSON?
Hi Colm,
any special reason for not using SyncopeClient?
SyncopeClient client = new SyncopeClientFactoryBean().setAddress(ADDRESS)
Konsole output .create(ADMIN_UNAME, ADMIN_PWD);
Ops, it should have been:
SyncopeClient client = new
SyncopeClientFactoryBean().setAddress(ADDRESS).create(ADMIN_UNAME,
ADMIN_PWD);
then
PagedResult<RoleTO> roleTOs = client.getService(RoleService.class).list();
This is by default using JSON.
Alternatively, can you show how your client instance above is obtained?
HTH
Regards.
--
Francesco Chicchiriccò
Tirasa - Open Source Excellence
http://www.tirasa.net/
Involved at The Apache Software Foundation:
member, Syncope PMC chair, Cocoon PMC, Olingo PMC
http://people.apache.org/~ilgrosso/