Skip to content
Advertisement

Error in parsing Json Object node while creating an issue of Jira using REST API of atlassian in Java

I am trying to create an issue using Jira REST API in java. But I am getting below Runtime Exception in my console.

Exception in thread "main" java.lang.RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: Unexpected IOException (of type org.codehaus.jackson.JsonParseException): Illegal white space character (code 0x20) as character #3 of 4-char base64 unit: can only used between units
 at [Source: N/A; line: -1, column: -1]
    at CreateIssue$1.writeValue(CreateIssue.java:60)
    at com.mashape.unirest.request.HttpRequestWithBody.body(HttpRequestWithBody.java:158)
    at CreateIssue.main(CreateIssue.java:72)

Below is my code, I have implemented same code as provided in the documentation, still I am getting an error.

import com.fasterxml.jackson.core.JsonProcessingException;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import com.mashape.unirest.http.ObjectMapper;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.codehaus.jackson.node.ObjectNode;

import java.io.IOException;

public class CreateIssue{
    public static void main(String[]args) {
        JsonNodeFactory jnf = JsonNodeFactory.instance;
        ObjectNode payload = jnf.objectNode();

        {
            ObjectNode fields = payload.putObject("fields");
            {
                fields.put("summary", "This is test Summary");
                ObjectNode project = fields.putObject("project");
                {
                    project.put("key", "DEM12");
                }
                ObjectNode issueType = fields.putObject("issuetype");
                {
                    issueType.put("name", "Task");
                }
            }

        }
        // Connect Jackson ObjectMapper to Unirest
        Unirest.setObjectMapper(new ObjectMapper() {
            private com.fasterxml.jackson.databind.ObjectMapper jacksonObjectMapper
                    = new com.fasterxml.jackson.databind.ObjectMapper();

            public <T> T readValue(String value, Class<T> valueType) {
                try {
                    return jacksonObjectMapper.readValue(value, valueType);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            public String writeValue(Object value) {
                try {
                    return jacksonObjectMapper.writeValueAsString(value);
                } catch (JsonProcessingException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        System.out.println("Payload from here: "+ payload);

        HttpResponse<com.mashape.unirest.http.JsonNode> response = null;
        try {
            response = Unirest.post("https://{myaccount}.atlassian.net//rest/api/3/issue")
                        .basicAuth("{myEmailId}", "{MyAPITOken}")
                    .header("Accept", "application/json")
                    .body(payload)
                    .asJson();


            System.out.println(response.getBody());
            System.out.println(response.getStatus());
        } catch (UnirestException e) {
            e.printStackTrace();
        }
    }
}

The output which I am printing here, is genuine json and if I put post request in Postman using that output, it is working fine. So I think error is lying in my code somewhere, but I don’t know where. Can anyone help with this?

Advertisement

Answer

// Connect Jackson ObjectMapper to Unirest
//Remove This Block Of Code first.
        Unirest.setObjectMapper(new ObjectMapper() {
            private com.fasterxml.jackson.databind.ObjectMapper jacksonObjectMapper
                    = new com.fasterxml.jackson.databind.ObjectMapper();

            public <T> T readValue(String value, Class<T> valueType) {
                try {
                    return jacksonObjectMapper.readValue(value, valueType);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            public String writeValue(Object value) {
                try {
                    return jacksonObjectMapper.writeValueAsString(value);
                } catch (JsonProcessingException e) {
                    throw new RuntimeException(e);
                }
            }
        });

//Then Add This Code.
//Use ObjectNode

ObjectNode obj = payload;
JSONObject json = new JSONObject(obj.toString());

HttpResponse<com.mashape.unirest.http.JsonNode> response = null;
        try {
            response = Unirest.post("https://{myaccount}.atlassian.net//rest/api/3/issue")
                        .basicAuth("{myEmailId}", "{MyAPITOken}")
                    .header("Accept", "application/json")
                    .body(json)
                    .asJson();


            System.out.println(response.getBody());
            System.out.println(response.getStatus());
        } catch (UnirestException e) {
            e.printStackTrace();
        }

I think so it will work.
Advertisement