Cannot update field Parent Link using RESTClient
Asked by zaharovvv_suek_ru:

I am trying to update Parent Link of issue and set its value from Epic link value. [I've found a post where some person were managed to do this](https://community.atlassian.com/t5/Marketplace-Apps-Integrations/Can-i-update-custom-field-value-of-Parent-Link-type-via-workflow/qaq-p/598745#M60268), however, I've always get the following error:
> WARN \[http.RESTClient\]: Error parsing 'text/html;charset=UTF-8' response groovy.json.JsonException: Unable to determine the current character, it is not a string, number, array, or object The current character read is '\<' with an int value of 60 Unable to determine the current character, it is not a string, number, array, or object line number 11 index number 10 \<html\>

However, if I insert the url into browser, I'll get the JSON response. My fullAddress variable has the following value:
> <https://onetwo.com/rest/api/2/issue/TS-74>

Jira version is 8.4.1

The whole code looks like this:

```
import groovy.json.*
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.component.ComponentAccessor
import groovyx.net.http.RESTClient
import groovyx.net.http.HttpResponseException
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import org.apache.log4j.Logger

def log = Logger.getLogger("com.acme.CreateSubtask")

def issue = ComponentAccessor.getIssueManager().getIssueObject("TS-74")
log.info('Current issue is: ' + issue)
def customFieldManager = ComponentAccessor.getCustomFieldManager()

//def newParentLink = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(0000L) // <- here is ID custom field what u have to update.
def jsonObj = new JsonSlurper().parseText('{ "fields": { "customfield_10976": "GP-259"} }') //customfield_23280 is Parent Link ID
def parentLink = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(10976L) // <- id parent link custom field

def userName = "user"
def password = "password"
def fullAddress = "https://onetwo.com/rest/api/2/issue/${issue.key}"
def authString = "${userName}:${password}".getBytes().encodeBase64().toString()

log.info(fullAddress);
log.info("parentLink ${parentLink}")

def client = new RESTClient(fullAddress)

try{
    //necessary to overwrite the value of custom field, via rest only update if custom field have value null.
    parentLink.updateValue(null, issue, new ModifiedValue(
        issue.getCustomFieldValue(parentLink), null),
        new DefaultIssueChangeHolder())
    client.put(path: fullAddress,
               contentType: groovyx.net.http.ContentType.JSON,
               body: jsonObj,
               headers: [Accept: 'application/json', 
                   Authorization: "Basic ${authString}"]
    )
} catch (final HttpResponseException e) {
     log.warn e
}
```

What am I doing wrong?


Answers:
author: DPKJ
body: One thing I can spot is, you are using \`fullAddress\` while initializing RESTClient and also as \`path\` parameter.

```
def client = new RESTClient(fullAddress) // LOOK HERE 

try{
    //necessary to overwrite the value of custom field, via rest only update if custom field have value null.
    parentLink.updateValue(null, issue, new ModifiedValue(
        issue.getCustomFieldValue(parentLink), null),
        new DefaultIssueChangeHolder())
    client.put(path: fullAddress, // LOOK HERE
               contentType: groovyx.net.http.ContentType.JSON,
               body: jsonObj,
               headers: [Accept: 'application/json', 
                   Authorization: "Basic ${authString}"]
    )
} catch (final HttpResponseException e) {
     log.warn e
}
```

You can define \`fullAddress\` and \`path\` as follows,

```
def fullAddress = "https://onetwo.com/rest/api/2"
def issuePath = "/issue/${issue.key}"

def client = new RESTClient(fullAddress)

try{
    //necessary to overwrite the value of custom field, via rest only update if custom field have value null.
    parentLink.updateValue(null, issue, new ModifiedValue(
        issue.getCustomFieldValue(parentLink), null),
        new DefaultIssueChangeHolder())
    client.put(path: issuePath, // LOOK CHANGE HERE
               contentType: groovyx.net.http.ContentType.JSON,
               body: jsonObj,
               headers: [Accept: 'application/json', 
                   Authorization: "Basic ${authString}"]
    )
} catch (final HttpResponseException e) {
     log.warn e
}
```

comments: author: zaharovvv_suek_ru
body: Thank you for your reply!

Could you see this question, please,

<https://community.atlassian.com/t5/Portfolio-for-Jira-questions/Update-Parent-Link-using-RESTClient-in-different-projects/qaq-p/1190991#M3841>


author: zaharovvv_suek_ru
body: Thank you for your reply!

Could you see this question, please,

<https://community.atlassian.com/t5/Portfolio-for-Jira-questions/Update-Parent-Link-using-RESTClient-in-different-projects/qaq-p/1190991#M3841>


author: DPKJ
body: Sure [@zaharovvv_suek_ru](/t5/user/viewprofilepage/user-id/1136958)


Tags: advanced-roadmaps

custom-field