Groovy / External Scripts / throwing exceptions

Originally asked by Adrian Suter on 04 January 2021 (original question)


Hello.

i externalized scripts and so far it works. I like to externalize a validation script which can throw an exception. But when this scripts should throws the exception, nothing happens: “throw new IssueTrackerException(message)”
The exception does not stop the synchronisation. (but i can see the message in the log which my script produces )
What do i do wrong?

Cheers Adrian
Adrian

---------------------------------------------------------
Incoming Rules:

Validate_IssueTypes.validate(issue, replica, connection)

// Core Field Mappings
issue.project = replica.project
issue.type = replica.type
issue.status = replica.status

SyncField_Summary.receive(issue, replica)
SyncField_Description.receive(issue, replica)
SyncField_Comment.receive(issue, replica, commentHelper)

---------------------------------------------------------
Script :

import org.slf4j.Logger
import com.exalate.api.exception.IssueTrackerException

class Validate_IssueTypes {

static validate(issue, replica, connection) {
String message
def allowedIssueTypes = [‘Task’, ‘Story’, ‘Bug’]
def log = org.slf4j.LoggerFactory.getLogger(“com.exalate”)

if (!allowedIssueTypes.contains(replica.type.name)) {
message = "Assert Issue-Types | " +
“Connection = '” + connection.name + "’ | " +
"Rule = ‘ruleName’ | " +
“Issue-Type = '” + replica.type.name + "’ is not allowed. " +
“The issue with key '” + replica.key + "’ will not be synchronized to hosting-zone. " +
“Check the trigger, the issue type should be excluded from synch trigger !”
log.error(message)
throw new IssueTrackerException(message)
}
}
}


Comments:

Serhiy Onyshchenko commented on 04 January 2021

Hello, Adrian Suter, what happens if you wrap the entire Incoming rules with a

try {   // ... incoming rules} catch (Exception e) {  log.error("#caught it!", e);  throw e;
}

Regards, Serhiy.

Answer by Adrian Suter on 05 January 2021

Hello Serhiy,

That worked, thanks very much. Now the synch wont’t happen and i get the message of the exception in teh Exalate error console as expected:

----------------------------------------------------------------------------------------------------

Error Detail Message:

Script error details: Assert Issue-Types | Connection = ‘BasicField_Sync’ | Rule = ‘ruleName’ | Issue-Type = ‘NixIssueType’ is not allowed. The issue with key ‘TESTBASY-19’ will not be synchronized to hosting-zone. Check the trigger, the issue type should be excluded from synch trigger !. Error line: Validate_IssueTypes.groovy:19

------------------------------------------------------------------------------------------------------

Another question about exceptions. When i read “Script error details:” and “Error line: Validate_IssueTypes.groovy:19” it seems for me, like the script it self had an error. Are there any other Exalate exceptions i should take ? Are there any links to the documentation ?

Cheers Adrian


This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.