I'm using this code to create customer request using JAVA API's
serviceDeskCustomerRequestService.
createCustomerRequest(applicationUser, serviceDeskCustomerRequestService.newCreateBuilder().raiseOnBehalfOf("username") .serviceDesk(serviceDesk).requestType(requestType).fieldValue(FieldId.withId("summary"), FieldInputValue.withValue("summary value")).fieldValue(FieldId.withId("description"), FieldInputValue.withValue("description value")).customerRequestChannelSource("Customer Channel Value").build());
If I used it as it is, it works, but when using it inside a schedular (thread) it stopped working for the below issue
com.atlassian.servicedesk.api.BadRequestException: The issue type selected is invalid. com.atlassian.servicedesk.api.BadRequestException: The issue type selected is invalid. at com.atlassian.servicedesk.internal.api.util.EitherExceptionUtils.httpStatusCodeToException(EitherExceptionUtils.java:95) at com.atlassian.servicedesk.internal.api.util.EitherExceptionUtils.lambda$anErrorEitherToException$0(EitherExceptionUtils.java:36) at io.atlassian.fugue.Either$Left.fold(Either.java:586) at com.atlassian.servicedesk.internal.api.util.EitherExceptionUtils.anErrorEitherToException(EitherExceptionUtils.java:32) at com.atlassian.servicedesk.internal.feature.customer.request.ServiceDeskCustomerRequestServiceImpl.createCustomerRequest(ServiceDeskCustomerRequestServiceImpl.java:45)
Anyone is facing this issue?
Hi Mohamad,
Thanks so much for your question.
Could you kindly provide some details around your environment and job?
Thank you,
Sam.
Jira Service Management
Thanks Sam for your reply,
Below is the code that we're trying out
package com.infosysta.twitter4jira.servlet; import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.project.Project; import com.atlassian.jira.user.ApplicationUser; import com.atlassian.servicedesk.api.ServiceDesk; import com.atlassian.servicedesk.api.ServiceDeskService; import com.atlassian.servicedesk.api.field.FieldId; import com.atlassian.servicedesk.api.field.FieldInputValue; import com.atlassian.servicedesk.api.request.CustomerRequestChannelSource; import com.atlassian.servicedesk.api.request.CustomerRequestCreateParameters; import com.atlassian.servicedesk.api.request.ServiceDeskCustomerRequestService; import com.atlassian.servicedesk.api.requesttype.RequestType; import com.atlassian.servicedesk.api.requesttype.RequestTypeQuery; import com.atlassian.servicedesk.api.requesttype.RequestTypeService; import com.atlassian.servicedesk.api.util.paging.PagedResponse; import com.infosysta.twitter4jira.utils.logger.ISLogger; import com.infosysta.twitter4jira.utils.serviceDesk.ServiceDeskCompatibility; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class WebServlet_Test extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { String username = req.getParameter("username"); String projectKey = req.getParameter("projectKey"); Thread thread = new Thread(new Runnable() { public RequestType getRequestTypeById(ApplicationUser loggedInUser, ServiceDesk serviceDesk, int requestTypeId) { RequestType selectedRequestType = null; try { RequestTypeService requestTypeService = ComponentAccessor.getOSGiComponentInstanceOfType(RequestTypeService.class); RequestTypeQuery.Builder requestTypeQueryBuilder = requestTypeService.newQueryBuilder(); RequestTypeQuery requestTypeQuery = requestTypeQueryBuilder.requestType(requestTypeId).serviceDesk(serviceDesk.getId()).build(); PagedResponse<RequestType> requestTypes = ServiceDeskCompatibility.getPagedResponse(requestTypeService.getRequestTypes(loggedInUser, requestTypeQuery)); if (requestTypes != null) { List<RequestType> requestTypesList = requestTypes.getResults(); for (RequestType requestType : requestTypesList) { if (requestType.getId() == requestTypeId) { selectedRequestType = requestType; break; } } } } catch (Exception e) { ISLogger.getLogger().writeExceptionLog(e); } return selectedRequestType; } @Override public void run() { try { ApplicationUser applicationUser = ComponentAccessor.getUserManager().getUserByName(username); Project project = ComponentAccessor.getProjectManager().getProjectByCurrentKey(projectKey); ServiceDeskService serviceDeskService = ComponentAccessor.getOSGiComponentInstanceOfType(ServiceDeskService.class); ServiceDesk serviceDesk = serviceDeskService.getServiceDeskForProject(applicationUser, project); long requestTypeId = 1;//ISUtilities.toLong(req.getParameter("requestTypeId")); RequestType requestType = getRequestTypeById(applicationUser, serviceDesk, (int) requestTypeId); ServiceDeskCustomerRequestService serviceDeskCustomerRequestService = ComponentAccessor.getOSGiComponentInstanceOfType(ServiceDeskCustomerRequestService.class); CustomerRequestCreateParameters customerRequestCreateParameters = serviceDeskCustomerRequestService.newCreateBuilder() .raiseOnBehalfOf(applicationUser.getUsername()) .serviceDesk(serviceDesk) .requestType(requestType) .fieldValue( FieldId.withId("summary"), FieldInputValue.withValue("From Servlet") ) .fieldValue( FieldId.withId("description"), FieldInputValue.withValue("From Servlet") ) .customerRequestChannelSource(CustomerRequestChannelSource.withValue("Servlet")) .build(); Object customerRequest = serviceDeskCustomerRequestService.createCustomerRequest(applicationUser, customerRequestCreateParameters); } catch (Exception e) { ISLogger.getLogger().writeExceptionLog(e); } } }); thread.start(); } catch (Exception e) { ISLogger.getLogger().writeExceptionLog(e); } } }
The issue is due to
ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
it returns null inside the thread
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.