suvera / scim2-compliance-test-utility

SCIM 2.0 Compliance Test Utility
https://suvera.github.io/
MIT License
11 stars 6 forks source link

Cannot invoke \"java.util.List.iterator()\" because the return value of \"dev.suvera.opensource.scim2.compliance.data.json.ScimAttribute.getSubAttributes()\" is null #7

Closed Horcrux7 closed 2 months ago

Horcrux7 commented 2 months ago

What this exceptions means? Is this a bug?

Test: Create new User (POST - 0) - Failed! Java: 21 Command line: java -Dserver.port=8081 -jar scim2-compliance-test-utility-1.0.0.jar

View Response:

0

{}

{
    "stackTrace": [
        {
            "methodName": "generateUser",
            "fileName": "FakeData.java",
            "lineNumber": 83,
            "className": "dev.suvera.opensource.scim2.compliance.utils.FakeData",
            "nativeMethod": false
        },
        {
            "methodName": "createTest",
            "fileName": "UserCrudTests.java",
            "lineNumber": 259,
            "className": "dev.suvera.opensource.scim2.compliance.tests.user.UserCrudTests",
            "nativeMethod": false
        },
        {
            "methodName": "execute",
            "fileName": "UserCrudTests.java",
            "lineNumber": 78,
            "className": "dev.suvera.opensource.scim2.compliance.tests.user.UserCrudTests",
            "nativeMethod": false
        },
        {
            "methodName": "runTestsCase",
            "fileName": "TestExecutionService.java",
            "lineNumber": 135,
            "className": "dev.suvera.opensource.scim2.compliance.tests.TestExecutionService",
            "nativeMethod": false
        },
        {
            "methodName": "executeTests",
            "fileName": "TestExecutionService.java",
            "lineNumber": 105,
            "className": "dev.suvera.opensource.scim2.compliance.tests.TestExecutionService",
            "nativeMethod": false
        },
        {
            "methodName": "invoke",
            "fileName": "<generated>",
            "lineNumber": -1,
            "className": "dev.suvera.opensource.scim2.compliance.tests.TestExecutionService$$FastClassBySpringCGLIB$$b2c7f38b",
            "nativeMethod": false
        },
        {
            "methodName": "invoke",
            "fileName": "MethodProxy.java",
            "lineNumber": 218,
            "className": "org.springframework.cglib.proxy.MethodProxy",
            "nativeMethod": false
        },
        {
            "methodName": "invokeJoinpoint",
            "fileName": "CglibAopProxy.java",
            "lineNumber": 771,
            "className": "org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation",
            "nativeMethod": false
        },
        {
            "methodName": "proceed",
            "fileName": "ReflectiveMethodInvocation.java",
            "lineNumber": 163,
            "className": "org.springframework.aop.framework.ReflectiveMethodInvocation",
            "nativeMethod": false
        },
        {
            "methodName": "proceed",
            "fileName": "CglibAopProxy.java",
            "lineNumber": 749,
            "className": "org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation",
            "nativeMethod": false
        },
        {
            "methodName": "lambda$invoke$0",
            "fileName": "AsyncExecutionInterceptor.java",
            "lineNumber": 115,
            "className": "org.springframework.aop.interceptor.AsyncExecutionInterceptor",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "run",
            "fileName": "FutureTask.java",
            "lineNumber": 317,
            "className": "java.util.concurrent.FutureTask",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "runWorker",
            "fileName": "ThreadPoolExecutor.java",
            "lineNumber": 1144,
            "className": "java.util.concurrent.ThreadPoolExecutor",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "run",
            "fileName": "ThreadPoolExecutor.java",
            "lineNumber": 642,
            "className": "java.util.concurrent.ThreadPoolExecutor$Worker",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "run",
            "fileName": "Thread.java",
            "lineNumber": 1583,
            "className": "java.lang.Thread",
            "nativeMethod": false
        }
    ],
    "message": "Cannot invoke \"java.util.List.iterator()\" because the return value of \"dev.suvera.opensource.scim2.compliance.data.json.ScimAttribute.getSubAttributes()\" is null",
    "suppressed": [],
    "localizedMessage": "Cannot invoke \"java.util.List.iterator()\" because the return value of \"dev.suvera.opensource.scim2.compliance.data.json.ScimAttribute.getSubAttributes()\" is null"
}
suvera commented 2 months ago

Yes, it seems that Null checks need to be added there.

issue should be fixed here: https://github.com/suvera/scim2-compliance-test-utility/commit/851130a80c61597152e066219bdfbe4f36e29baa

Horcrux7 commented 2 months ago

Thanks for the quick fix. Now I get another NPE on another line.

0

{}

{
    "stackTrace": [
        {
            "methodName": "getAttributesData",
            "fileName": "FakeData.java",
            "lineNumber": 218,
            "className": "dev.suvera.opensource.scim2.compliance.utils.FakeData",
            "nativeMethod": false
        },
        {
            "methodName": "getAttributeData",
            "fileName": "FakeData.java",
            "lineNumber": 248,
            "className": "dev.suvera.opensource.scim2.compliance.utils.FakeData",
            "nativeMethod": false
        },
        {
            "methodName": "generateUser",
            "fileName": "FakeData.java",
            "lineNumber": 121,
            "className": "dev.suvera.opensource.scim2.compliance.utils.FakeData",
            "nativeMethod": false
        },
        {
            "methodName": "createTest",
            "fileName": "UserCrudTests.java",
            "lineNumber": 259,
            "className": "dev.suvera.opensource.scim2.compliance.tests.user.UserCrudTests",
            "nativeMethod": false
        },
        {
            "methodName": "execute",
            "fileName": "UserCrudTests.java",
            "lineNumber": 78,
            "className": "dev.suvera.opensource.scim2.compliance.tests.user.UserCrudTests",
            "nativeMethod": false
        },
        {
            "methodName": "runTestsCase",
            "fileName": "TestExecutionService.java",
            "lineNumber": 135,
            "className": "dev.suvera.opensource.scim2.compliance.tests.TestExecutionService",
            "nativeMethod": false
        },
        {
            "methodName": "executeTests",
            "fileName": "TestExecutionService.java",
            "lineNumber": 105,
            "className": "dev.suvera.opensource.scim2.compliance.tests.TestExecutionService",
            "nativeMethod": false
        },
        {
            "methodName": "invoke",
            "fileName": "<generated>",
            "lineNumber": -1,
            "className": "dev.suvera.opensource.scim2.compliance.tests.TestExecutionService$$FastClassBySpringCGLIB$$b2c7f38b",
            "nativeMethod": false
        },
        {
            "methodName": "invoke",
            "fileName": "MethodProxy.java",
            "lineNumber": 218,
            "className": "org.springframework.cglib.proxy.MethodProxy",
            "nativeMethod": false
        },
        {
            "methodName": "invokeJoinpoint",
            "fileName": "CglibAopProxy.java",
            "lineNumber": 771,
            "className": "org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation",
            "nativeMethod": false
        },
        {
            "methodName": "proceed",
            "fileName": "ReflectiveMethodInvocation.java",
            "lineNumber": 163,
            "className": "org.springframework.aop.framework.ReflectiveMethodInvocation",
            "nativeMethod": false
        },
        {
            "methodName": "proceed",
            "fileName": "CglibAopProxy.java",
            "lineNumber": 749,
            "className": "org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation",
            "nativeMethod": false
        },
        {
            "methodName": "lambda$invoke$0",
            "fileName": "AsyncExecutionInterceptor.java",
            "lineNumber": 115,
            "className": "org.springframework.aop.interceptor.AsyncExecutionInterceptor",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "run",
            "fileName": "FutureTask.java",
            "lineNumber": 317,
            "className": "java.util.concurrent.FutureTask",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "runWorker",
            "fileName": "ThreadPoolExecutor.java",
            "lineNumber": 1144,
            "className": "java.util.concurrent.ThreadPoolExecutor",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "run",
            "fileName": "ThreadPoolExecutor.java",
            "lineNumber": 642,
            "className": "java.util.concurrent.ThreadPoolExecutor$Worker",
            "nativeMethod": false
        },
        {
            "moduleName": "java.base",
            "moduleVersion": "21",
            "methodName": "run",
            "fileName": "Thread.java",
            "lineNumber": 1583,
            "className": "java.lang.Thread",
            "nativeMethod": false
        }
    ],
    "message": "Cannot invoke \"java.util.Collection.iterator()\" because \"attributes\" is null",
    "suppressed": [],
    "localizedMessage": "Cannot invoke \"java.util.Collection.iterator()\" because \"attributes\" is null"
}