pingidentity / scim2

The UnboundID SCIM 2.0 SDK for Java
176 stars 72 forks source link

NullPointerException in SearchRequestBuilder.class #150

Open suvera opened 3 years ago

suvera commented 3 years ago

JAVA: 1.8 scim2sdk: 2.3.5 Jackson: 2.11.1

class: SearchRequestBuilder.java Method: invoke


try {
                JsonParser parser = JsonUtils.getObjectReader().getFactory().createParser(inputStream);

                try {
                    parser.nextToken();
                    boolean stop = false;

                    while(!stop && parser.nextToken() != JsonToken.END_OBJECT) {
                        String field = parser.getCurrentName();
                        parser.nextToken();
                        if (field.equals("schemas")) {
                            parser.skipChildren();

as String field = parser.getCurrentName(); returns NULL, so field NULL.

field.equals() throws error ...

I am checking this with Valid SCIM2 schema , JSON is perfectly valid.

Scim JSON:


[
    {
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:ResourceType"
        ],
        "id": "ResourceType",
        "meta": {
            "resourceType": "ResourceType",

.....rest of json here ...

code throws Error on first { after [


nextToken: START_ARRAY, id: 3, value: null, location: [Source: (org.glassfish.jersey.message.internal.EntityInputStream); line: 1, column: 2], text: null
nextToken: START_OBJECT, id: 1, value: null, location: [Source: (org.glassfish.jersey.message.internal.EntityInputStream); line: 2, column: 6], text: null

Exception in thread "main" java.lang.NullPointerException
    at com.unboundid.scim2.client.requests.SearchRequestBuilder.invoke(SearchRequestBuilder.java:280)
    at com.unboundid.scim2.client.requests.SearchRequestBuilder.invoke(SearchRequestBuilder.java:155)
    at com.unboundid.scim2.client.ScimService.getResourceTypes(ScimService.java:113)
papegaaij commented 2 years ago

The problem seems to be that the ResourceTypes resource returns a JSON array as top level element and not an object with a Resources property containing the actual resources. This breaks the getResourceTypes method.