ListRecord.Field array-shaped `message` still fails in the production GsonFactory (follow-up to #1587)
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 74/100
Direção de pesquisa
Comece com GsonFactory.registerTypeAdapters e GsonListViewGroupingFactory; a issue propõe mover GsonListRecordFieldFactory para slack-api-model/src/main/java/com/slack/api/util/json/ e registrá-lo na factory de produção. Confira o adaptador de teste existente e ListRecordFieldTest para verificar o tratamento esperado de objetos individuais e arrays. O trabalho estará concluído quando a GsonFactory de produção analisar as duas formas com sucesso.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Issue summary
When the Slack API returns a conversations.replies (or conversations.history) response that contains a Slack Lists item attachment, the SDK throws JsonSyntaxException whenever any ListRecord.Field.message value is a JSON array instead of a single object. The whole API call fails, and no Message data is returned.
This is the bug from #1587. #1590 (released in v1.49.0) closed #1587, but the bug is still in the production code path in v1.52.0.
Affected versions
- v1.46.0 through v1.48.1 (verified in #1587; also seen in production on v1.48.1)
- v1.49.0 through v1.52.0: the production
GsonFactoryhas no adapter forListRecord.Field. @maoppay saw the failure on v1.50.0 (comment in #1587), and the live probe in #1644 shows it too.
Why #1590 was not sufficient
#1590 changed two things:
ListRecord.Field(slack-api-model/src/main). It addedprivate transient List<Message> messagesandgetMessages()/setMessages(). The fieldmessageis still a singleMessage. Gson skipstransientfields and sets fields by reflection, not through setters. So without an adapter, Gson still maps the JSON keymessageto theMessagefield, and an array still fails.GsonListRecordFieldFactory, the adapter that converts the array. #1590 put it inslack-api-model/src/test/java/test_locally/util/list/and registered it only in the testGsonFactory(slack-api-model/src/test/java/test_locally/unit/GsonFactory.java).
ListRecordFieldTest parses with that test GsonFactory, so it passes. Real API calls parse with com.slack.api.util.json.GsonFactory in slack-api-client (MethodsClientImpl calls GsonFactory.createSnakeCase(config)), and that class does not register the adapter. Also, the json-logs/samples/api samples still have message as a single object, so the MockSlackApi tests (for example ConversationsTest) never see the array shape.
Minimal reproduction
import com.google.gson.Gson;
import com.slack.api.methods.response.conversations.ConversationsRepliesResponse;
import com.slack.api.util.json.GsonFactory;
public class Repro {
public static void main(String[] args) {
// Mirrors the shape Slack returns when a Lists item's `message` field
// has multiple values (array form).
String payload =
"{\"ok\":true,\"messages\":[{\"type\":\"message\",\"user\":\"U1\",\"ts\":\"1.0\","
+ "\"text\":\"hi\",\"attachments\":[{\"list_record\":{\"record\":{\"fields\":["
+ "{\"key\":\"name\",\"message\":{\"text\":\"ok\"}},"
+ "{\"key\":\"details\",\"message\":[{\"text\":\"a\"},{\"text\":\"b\"}]}"
+ "]}}}]}]}";
Gson sdkGson = GsonFactory.createSnakeCase();
// Still throws JsonSyntaxException on v1.52.0 at
// $.messages[0].attachments[0].list_record.record.fields[1].message
ConversationsRepliesResponse parsed =
sdkGson.fromJson(payload, ConversationsRepliesResponse.class);
}
}
Expected behavior
The SDK accepts both single-object and array shapes for ListRecord.Field.message in real API responses, as getMessages() from #1590 intends.
Proposed fix
#1654 moves GsonListRecordFieldFactory to slack-api-model/src/main/java/com/slack/api/util/json/ (next to GsonListViewGroupingFactory) and registers it in GsonFactory.registerTypeAdapters.
- Linguagem predominante
- Java
- Estrelas
- 602
- Forks
- 236
- Merge médio
- 1d 21h
- PRs com merge (30d)
- 8
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de slackapi/java-slack-sdk
-
enhancement project:slack-api-model
Dificuldade 3/5 Meio dia Facilidade para iniciantes 75/100
slackapi/java-slack-sdk#1657 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Upgrade JettyTalvez já em andamento @skrcode assumiu há 54 dias. Abertaauto-triage-skip dependencies good first issue
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
slackapi/java-slack-sdk#1567 · 4 comentários ·
Mantenedores costumam responder em até 1 dia
-
auto-triage-skip discussion enhancement
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
slackapi/java-slack-sdk#1535 · 5 comentários ·
Mantenedores costumam responder em até 1 dia
-
auto-triage-skip question untriaged
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
slackapi/java-slack-sdk#1528 · 7 comentários ·
Mantenedores costumam responder em até 1 dia
-
Update okhttp to 5.xAbertaauto-triage-skip dependencies project:slack-api-client project:slack-app-backend
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
slackapi/java-slack-sdk#1500 · 11 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
Todas as issues de slackapi/java-slack-sdk
Issues semelhantes
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 75/100
521xueweihan/HelloGitHub#4105 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
Mantenedores costumam responder em até 1 dia
-
code-maintenance
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 80/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
krizaka/krizaka-notifications#32 ·
Mantenedores costumam responder em até 1 dia