ListRecord.Field array-shaped `message` still fails in the production GsonFactory (follow-up to #1587)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
Línea de trabajo
Empieza con GsonFactory.registerTypeAdapters y GsonListViewGroupingFactory; el issue propone mover GsonListRecordFieldFactory a slack-api-model/src/main/java/com/slack/api/util/json/ y registrarlo en la factoría de producción. Comprueba el adaptador de prueba existente y ListRecordFieldTest para ver el comportamiento esperado con objetos individuales y arrays. Se considera terminado cuando la GsonFactory de producción analiza correctamente ambas formas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Java
- Estrellas
- 602
- Forks
- 235
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 8
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de slackapi/java-slack-sdk
-
Upgrade JettyPosiblemente ocupada @skrcode la tomó hace 38 días. Abiertoauto-triage-skip dependencies good first issue
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
slackapi/java-slack-sdk#1567 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
-
auto-triage-skip discussion enhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
slackapi/java-slack-sdk#1535 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
Workflows, Slack Apps and formsAbiertoauto-triage-skip question untriaged
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
slackapi/java-slack-sdk#1528 · 7 comentarios ·
Los mantenedores suelen responder en 1 día
-
Update okhttp to 5.xAbiertoauto-triage-skip dependencies project:slack-api-client project:slack-app-backend
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
slackapi/java-slack-sdk#1500 · 11 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Table Block SupportAbiertoauto-triage-skip enhancement project:slack-api-model
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
slackapi/java-slack-sdk#1499 · 4 comentarios · 3 reacciones ·
Los mantenedores suelen responder en 1 día
Todos los issues de slackapi/java-slack-sdk
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
sqlcipher/sqlcipher-android#97 · 1 comentario ·
-
bug IIIF interoperability
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Netcracker/qubership-integration-platform#1046 ·
Los mantenedores suelen responder en 2 días
-
`check_java_version()` fails when Java path contains spaces (Windows / Git Bash, `C:\Program Files`)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100