Webservices Parsing Issue - Brackets on Account ID

:bangbang: Please be sure you’ve read the docs and API specs before asking for help. Also, please be sure you’ve searched the forum for your answer before you create a new topic.

Please consider addressing the following when creating your topic:

  • What have you tried?
  • What errors did you face (share screenshots)?
  • Share the details of your efforts (code / search query, workflow json etc.)?
  • What is the result you are getting and what were you expecting?

We are building out our first web services connector on our own and ran into this issue where the account name has brackets around the data. This is impacting accounts from being correlated and obviously makes the data look incorrect.

We’ve tried an after provisioning rule for the web services connector to try to clean up the data but that didn’t seem to work despite clearing out accounts from the source and aggregating them all over again.

Below is the rule we attempted to use that did not seem to have an impact on the brackets we were trying to remove.

{
    "description": "This rule is used by the Web Services connector to update parsed resource object. Create List of Objects which will later converted to Resource object.",
    "type": "WebServiceAfterOperationRule",
    "signature": {
        "input": [],
        "output": {
            "name": "Update Account/Group List",
            "description": "Update information Map contains parsed list of accounts",
            "type": null
        }
    },
    "sourceCode": {
        "version": "1.0",
        "script": "import sailpoint.object.ProvisioningPlan;\r\nimport sailpoint.object.ProvisioningResult;\r\nimport sailpoint.object.Application;\r\nimport sailpoint.object.ResourceObject;\r\nimport sailpoint.api.SailPointContext;\r\nimport sailpoint.tools.GeneralException;\r\nimport sailpoint.tools.Util;\r\nimport java.util.Map;\r\n\r\npublic class AfterProvisioningRule extends sailpoint.object.Rule {\r\n\r\n    public ProvisioningResult execute(SailPointContext context, \r\n                                      ProvisioningPlan plan, \r\n                                      ProvisioningResult result, \r\n                                      Application application, \r\n                                      ResourceObject account) throws GeneralException {\r\n\r\n        \/\/ Get the email attribute from the account object\r\n        String email = (String) account.getAttribute(\"email\");\r\n\r\n        if (!Util.isNullOrEmpty(email)) {\r\n            \/\/ Remove brackets from the email string\r\n            String cleanedemail = email.replaceAll(\"[\\\\[\\\\]]\", \"\");\r\n\r\n            \/\/ Update the account object with the cleaned email\r\n            account.setAttribute(\"email\", cleanedemail);\r\n        }\r\n\r\n        \/\/ Return the result as-is (or modified if needed)\r\n        return result;\r\n    }\r\n}"
    },
    "attributes": {
        "sourceVersion": "1.0"
    },
    "id": "id",
    "name": "After Operation Rule for Github",
    "created": "2025-08-26T16:19:18.701Z",
    "modified": "2025-08-26T16:19:18.701Z"
}

Has anyone experienced this issue before with the webservices connector? Any advice on how to resolve this?

Hi @sam-anderson

Can I have a look into the raw response and account schema

Here’s the account schema:

{
    "nativeObjectType": "user",
    "identityAttribute": "id",
    "displayAttribute": "email",
    "hierarchyAttribute": null,
    "includePermissions": false,
    "features": [],
    "configuration": {},
    "attributes": [
        {
            "name": "id",
            "type": "STRING",
            "schema": null,
            "description": "id",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "email",
            "type": "STRING",
            "schema": null,
            "description": "email",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "formatted",
            "type": "STRING",
            "schema": null,
            "description": "formatted name",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "userName",
            "type": "STRING",
            "schema": null,
            "description": "userName-email address",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "displayName",
            "type": "STRING",
            "schema": null,
            "description": "displayName",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "givenName",
            "type": "STRING",
            "schema": null,
            "description": "givenName",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "familyName",
            "type": "STRING",
            "schema": null,
            "description": "familyName",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "externalId",
            "type": "STRING",
            "schema": null,
            "description": "externalId - email address",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "roles",
            "type": "STRING",
            "schema": {
                "type": "CONNECTOR_SCHEMA",
                "id": "98b058bf28b741a3bc01a620046b7da5",
                "name": "roles"
            },
            "description": "Roles - either enterprise_owner or user",
            "isMulti": false,
            "isEntitlement": true,
            "isGroup": true
        },
        {
            "name": "active",
            "type": "STRING",
            "schema": null,
            "description": "Active",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "type",
            "type": "STRING",
            "schema": null,
            "description": "type - regarding type of email",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "primary",
            "type": "BOOLEAN",
            "schema": null,
            "description": "primary - true or false if emails is the primary value",
            "isMulti": false,
            "isEntitlement": false,
            "isGroup": false
        },
        {
            "name": "groups",
            "type": "STRING",
            "schema": {
                "type": "CONNECTOR_SCHEMA",
                "id": "21b623a0952b4111b75dd5c3da284351",
                "name": "group"
            },
            "description": "groups",
            "isMulti": true,
            "isEntitlement": true,
            "isGroup": true
        }
    ],
    "id": "id",
    "name": "account",
    "created": "2025-08-18T20:13:48.300Z",
    "modified": "2025-08-26T16:51:41.379Z"
}

Example raw response I grabbed from postman:

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "totalResults": 1,
    "itemsPerPage": 1,
    "startIndex": 1,
    "Resources": [
        {
            "emails": [
                {
                    "value": "Sam.Anderson@x.com",
                    "type": "work",
                    "primary": true
                }
            ],
            "roles": [
                {
                    "value": "enterprise_owner"
                }
            ],
            "active": true,
            "displayName": "Sam Anderson",
            "externalId": "Sam.Anderson@x.com",
            "name": {
                "familyName": "Anderson",
                "formatted": "Sam Anderson",
                "givenName": "Sam"
            },
            "userName": "Sam.Anderson@x.com",
            "schemas": [
                "urn:ietf:params:scim:schemas:core:2.0:User"
            ],
            "id": "1112223333",
            "meta": {
                "resourceType": "User",
                "created": "2025-08-12T14:26:14.000-05:00",
                "lastModified": "2025-08-12T14:26:14.000-05:00",
                "location": "https://api.com/scim/v2/enterprises/x/Users/1112223333"
            },
            "groups": []
        }
    ]
}

What is your Account Name attribute configured in Account Schema of your webservice source? Is it email attribute ?

It seems your Webservice after create rule is in incorrect format. Refer the below sample code. I dont understand why you have defined a Class as highlighted below. Its not required at all.

Create the rule as per below format.

The issue is with you WebServiceAfterCreate Rule only. Your rule is trying to do below.

  1. Example I/O
  • "john.doe@example.com" → unchanged.

  • "[john.doe@example.com]""john.doe@example.com"

  • "[a@x.com, b@y.com]" (string with brackets) → "a@x.com, b@y.com" (note: still a single string, comma-separated)

But, it seems your WebServcieAfterCreate rule is not getting executed as expected, hence, the email is getting populated with Braces itself.

Hence, kindly re-write the rule as per below mentioned template, re-deploy and retest the flow, the parsing issue should get resolved for you.

Regards,

Rohit Wekhande.