{"record":{"id":"24da3d9c4c027498","repo":"apache/dubbo","slug":"unsupported-generic-type-generic","errorCode":null,"errorMessage":"Unsupported generic type <generic>","messagePattern":"Unsupported generic type <generic>","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java","lineNumber":182,"sourceCode":"    @Deprecated\n    public void setGeneric(Boolean generic) {\n        if (generic != null) {\n            this.generic = generic.toString();\n        }\n    }\n\n    public String getGeneric() {\n        return generic;\n    }\n\n    public void setGeneric(String generic) {\n        if (StringUtils.isEmpty(generic)) {\n            return;\n        }\n        if (ProtocolUtils.isValidGenericValue(generic)) {\n            this.generic = generic;\n        } else {\n            throw new IllegalArgumentException(\"Unsupported generic type \" + generic);\n        }\n    }\n\n    @Override\n    @Transient\n    protected boolean isNeedCheckMethod() {\n        return StringUtils.isEmpty(getGeneric());\n    }\n\n    /**\n     * @return\n     * @deprecated instead, use the parameter <b>scope</> to judge if it's in jvm, scope=local\n     */\n    @Deprecated\n    public Boolean isInjvm() {\n        return injvm;\n    }\n","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/apache/dubbo/blob/3a3043227f5571d25eb2889de5bca22f2914843b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java#L164-L200","documentation":"Thrown by AbstractReferenceConfig.setGeneric() when the supplied generic value is not recognized by ProtocolUtils.isValidGenericValue(). Valid values are: 'true', 'false', 'nativejava', 'bean', 'protobuf', 'gson', 'raw.return' (case-insensitive). The generic setting controls generic invocation (generalized call) behavior for the reference, so an unknown value is rejected at config time rather than failing at invocation.","triggerScenarios":"Calling referenceConfig.setGeneric(\"whatever\") or setting <dubbo:reference generic=\"whatever\"/> with an unrecognized string. Passing a custom serializer name that is not one of the built-in generic types.","commonSituations":"Typos such as 'generc', 'javabean', or using a value from a different RPC framework. Misremembering the valid tokens after a Dubbo upgrade that added/removed generic serializers.","solutions":["Use one of the valid generic values: 'true'/'false' (toggle), 'nativejava', 'bean', 'protobuf', 'gson', 'raw.return'.","Leave generic unset if standard invocation is intended.","For custom serialization, implement a proper generic filter extension rather than passing an arbitrary string."],"exampleFix":"// before\nreferenceConfig.setGeneric(\"javabean\");\n// after\nreferenceConfig.setGeneric(\"bean\");","handlingStrategy":"validation","validationCode":"import org.apache.dubbo.rpc.support.ProtocolUtils;\n\nString generic = \"bean\";\nif (!ProtocolUtils.isValidGenericValue(generic)) {\n    throw new IllegalArgumentException(\"Invalid generic value: \" + generic\n        + \". Valid: true,false,nativejava,bean,protobuf,gson,raw.return\");\n}\nreferenceConfig.setGeneric(generic);","typeGuard":"static boolean isValidGeneric(String g) {\n    return g == null || org.apache.dubbo.rpc.support.ProtocolUtils.isValidGenericValue(g);\n}","tryCatchPattern":"try {\n    referenceConfig.setGeneric(value);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Unsupported generic type\")) {\n        referenceConfig.setGeneric(\"true\"); // fallback to default generic\n    } else throw e;\n}","preventionTips":["Validate generic tokens against ProtocolUtils.isValidGenericValue before setting.","Keep a list of valid generic values near config code.","Treat custom serializer names as needing a proper SPI filter, not a generic string."],"tags":["config","generic","reference","validation"],"backgroundTag":null,"analyzedSha":"3a3043227f5571d25eb2889de5bca22f2914843b","analyzedAt":"2026-08-14T00:43:19.853Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}