{"record":{"id":"89a2b2f097640624","repo":"apereo/cas","slug":"invalid-ticket-type-blank-specified","errorCode":null,"errorMessage":"Invalid ticket type [blank] specified","messagePattern":"Invalid ticket type \\[blank\\] specified","errorType":"exception","errorClass":"InvalidTicketException","httpStatus":null,"severity":"error","filePath":"core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/serialization/DefaultTicketStringSerializationManager.java","lineNumber":33,"sourceCode":" * @author Misagh Moayyed\n * @since 6.1.0\n */\n@RequiredArgsConstructor\n@Slf4j\npublic class DefaultTicketStringSerializationManager implements TicketSerializationManager {\n    private final TicketSerializationExecutionPlan ticketSerializationExecutionPlan;\n\n    @Override\n    public String serializeTicket(final Ticket ticket) {\n        val serializer = Objects.requireNonNull(ticketSerializationExecutionPlan.getTicketSerializer(ticket),\n            () -> \"Unable to find ticket serializer for \" + ticket.getId());\n        return serializer.toString(ticket);\n    }\n\n    @Override\n    public Ticket deserializeTicket(final String ticketContent, final String type) {\n        if (StringUtils.isBlank(type)) {\n            throw new InvalidTicketException(\"Invalid ticket type [blank] specified\");\n        }\n        val serializer = ticketSerializationExecutionPlan.getTicketSerializer(type);\n        if (serializer == null) {\n            throw new IllegalArgumentException(\"Unable to find ticket deserializer for \" + type);\n        }\n        return Unchecked.supplier(() -> {\n            val clazz = Class.forName(type);\n            return deserializeTicket(ticketContent, (Class) clazz);\n        }).get();\n    }\n\n    @Override\n    public <T extends Ticket> T deserializeTicket(final String ticketContent, final Class<T> clazz) {\n        val serializer = Objects.requireNonNull(ticketSerializationExecutionPlan.getTicketSerializer(clazz),\n            () -> \"Unable to find ticket deserializer for \" + clazz.getSimpleName());\n        LOGGER.trace(\"Unmarshalling ticket content from [{}]\", ticketContent);\n        val ticket = serializer.from(ticketContent);\n        if (ticket == null) {","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/apereo/cas/blob/e7288fc434b4f4505b8452e1a57e8fb3111bb863/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/serialization/DefaultTicketStringSerializationManager.java#L15-L51","documentation":"deserializeTicket(content, type) was called with a blank/null ticket type string; the manager cannot load a serializer or resolve the ticket class without it, so InvalidTicketException is thrown immediately as an input guard. The input at fault is the 'type' parameter, which must be a fully-qualified ticket class name (e.g., org.apereo.cas.ticket.TicketGrantingTicketImpl).","triggerScenarios":"Thrown at core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/serialization/DefaultTicketStringSerializationManager.java:33 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass the correct fully-qualified ticket class name as the type argument","Check that the stored serialization record includes the ticket type metadata","Trace the caller that lost the type information before deserialization"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e7288fc434b4f4505b8452e1a57e8fb3111bb863","analyzedAt":"2026-09-08T15:39:16.015Z","contentChangedAt":"2026-09-08T15:39:16.015Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}