Невозможно добавить вложение в новый тикет RT - PullRequest
0 голосов
/ 07 июня 2019

В настоящее время я использую RT 4.4.3 в проекте и пытаюсь создать новый тикет с вложением, используя код Java.

Я пытался следовать инструкциям, предоставленным этот ресурс BestPractical размещен на GitHub и указан в этом списке запросов.

Фрагмент кода, который пытается выполнить операцию, выглядит следующим образом:

PostMethod mPost = new PostMethod(TicketListConstants.SEGNALAZIONI_RTIR_URI + "/ticket");

        mPost.setRequestHeader("Content-type", "application/json");
        mPost.setRequestHeader("Authorization", TicketListConstants.SEGNALAZIONI_RTIR_TOKEN);

        /*String json = ;
        NameValuePair[] data = {
                new NameValuePair("content", json)
        };*/
        UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
        File file = uploadRequest.getFile("fileName");
        String filename = uploadRequest.getFileName("fileName");

        byte[] filecontent = this.encodeBase64(file);

        mPost.setRequestBody("{ \"Queue\": \"Infosharing\", \"Subject\": \""+subject+"\",\"From\":\""+currentUser.getEmailAddress()+"\",\"To\":\"test@liferay.com\",\"Owner\":\""
                                +currentUser.getEmailAddress()+"\",\"Requestor\":\""+currentUser.getEmailAddress()+"\",\"Content\":\""+description+"\",\"AttachmentsContents\":[{\"FileName\":\""+filename+"\",\"FileType\":\"application/pdf\",\"FileContent\":\""+filecontent+"\"}]}");
        HttpClient cl = new HttpClient();
        String result = "";
        String newId = "";
        try {
            cl.executeMethod(mPost);
            result = mPost.getResponseBodyAsString();

            if (result != null) {
                JSONObject json = null;
                try {
                    json = JSONFactoryUtil.createJSONObject(result);
                } catch (JSONException e) {
                    _log.error("Error extracting ticket info: "+e.getMessage());
                }
                newId = json.getString("id");
            }
        } catch (UnsupportedEncodingException e){
            _log.error("Error in searching tickets: "+e.getMessage());
        } catch (IOException io) {
            _log.error("Error in searching tickets: "+io.getMessage());
        }

Итак, JSON I 'm отправка в RT выглядит следующим образом:

{ "Queue": "Infosharing", "Subject": "Tutto in uno","From":"test@liferay.com","To":"test@liferay.com","Owner":"test@liferay.com","Requestor":"test@liferay.com","Content":"Aggiungo tutto in un solo passaggio","AttachmentsContents":[{"FileName":"prova.txt","FileType":"plain/text","FileContent":""}]}

Проблема в том, что заявка создана правильно, но вложение не добавлено.

Я также пытался выполнить то же самое с использованием SOAPUI, но без вложениядобавляется в заявку, даже если ответ без ошибок.

Может ли кто-нибудь помочь мне, что я делаю неправильно?

РЕДАКТИРОВАТЬ 2019-06-10: поскольку, как сообщается здесь , по крайней мере, до конца декабря 2018 года:

СОЗДАНИЕ ПРИЛОЖЕНИЙ В настоящее время RT не позволяет создавать вложения через их API.

См. https://rt -wiki.bestpractical.com/wiki/REST#Ticket_Attachment

но в качестве временного обходного пути должна быть возможность публиковать вложения в комментарии к билетам, кто-нибудь может помочь найти решение этой проблемы?

1 Ответ

0 голосов
/ 07 июня 2019

Поскольку я не могу протестировать ваш код, я предлагаю вам использовать HttpClient 4, ниже я приведу пример кода.Измените код в соответствии с вашими требованиями и попробуйте проверить.

HttpPost post = new HttpPost("http://rtserver.com");
FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY);
StringBody stringBody1 = new StringBody("Message 1", ContentType.MULTIPART_FORM_DATA);

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("upfile", fileBody);
builder.addPart("text1", stringBody1);

HttpEntity entity = builder.build();

post.setEntity(entity);

HttpResponse response = client.execute(post);
...