{"record":{"id":"067d062d773f962b","repo":"Netflix/Hystrix","slug":"unknown-property","errorCode":null,"errorMessage":"unknown {} property: {}","messagePattern":"unknown (.+?) property: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hystrix-contrib/hystrix-javanica/src/main/java/com/netflix/hystrix/contrib/javanica/conf/HystrixPropertiesManager.java","lineNumber":127,"sourceCode":"    public static HystrixThreadPoolProperties.Setter initializeThreadPoolProperties(List<HystrixProperty> properties) throws IllegalArgumentException {\n        return initializeProperties(HystrixThreadPoolProperties.Setter(), properties, TP_PROP_MAP, \"thread pool\");\n    }\n\n    /**\n     * Creates and sets Hystrix collapser properties.\n     *\n     * @param properties the collapser properties\n     */\n    public static HystrixCollapserProperties.Setter initializeCollapserProperties(List<HystrixProperty> properties) {\n        return initializeProperties(HystrixCollapserProperties.Setter(), properties, COLLAPSER_PROP_MAP, \"collapser\");\n    }\n\n    private static <S> S initializeProperties(S setter, List<HystrixProperty> properties, Map<String, PropSetter<S, String>> propMap, String type) {\n        if (properties != null && properties.size() > 0) {\n            for (HystrixProperty property : properties) {\n                validate(property);\n                if (!propMap.containsKey(property.name())) {\n                    throw new IllegalArgumentException(\"unknown \" + type + \" property: \" + property.name());\n                }\n\n                propMap.get(property.name()).set(setter, property.value());\n            }\n        }\n        return setter;\n    }\n\n    private static void validate(HystrixProperty hystrixProperty) throws IllegalArgumentException {\n        Validate.notBlank(hystrixProperty.name(), \"hystrix property name cannot be null or blank\");\n    }\n\n    private static final Map<String, PropSetter<HystrixCommandProperties.Setter, String>> CMD_PROP_MAP =\n            ImmutableMap.<String, PropSetter<HystrixCommandProperties.Setter, String>>builder()\n                    .put(EXECUTION_ISOLATION_STRATEGY, new PropSetter<HystrixCommandProperties.Setter, String>() {\n                        @Override\n                        public void set(HystrixCommandProperties.Setter setter, String value) throws IllegalArgumentException {\n                            setter.withExecutionIsolationStrategy(toEnum(EXECUTION_ISOLATION_STRATEGY, value, HystrixCommandProperties.ExecutionIsolationStrategy.class,","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/Netflix/Hystrix/blob/5ce3bc58c38e7ca60ef2fe0e516e390e294ad941/hystrix-contrib/hystrix-javanica/src/main/java/com/netflix/hystrix/contrib/javanica/conf/HystrixPropertiesManager.java#L109-L145","documentation":"HystrixPropertiesManager.initializeProperties looks up each @HystrixProperty name in the type-specific property map (command / thread-pool / collapser) and calls the corresponding setter on the HystrixProperties.Setter. If the name passes the not-blank validation but is not a key in that map, it throws IllegalArgumentException('unknown <type> property: <name>') naming the property category and the unknown name.","triggerScenarios":"Putting a command property (e.g. execution.isolation.strategy) under @HystrixCommand(threadPoolProperties=...), a thread-pool property under commandProperties, any property under @HystrixCollapser(collapserProperties=...) that is not a collapser property (maxRequestsInBatch, timerDelayInMilliseconds, requestCache.enabled), or misspelling any name.","commonSituations":"Copy-pasting @HystrixProperty blocks between the wrong attribute; property lists reordered during refactoring; names valid in a newer Hystrix version used against an older javanica jar.","solutions":["Match the error's <type> prefix (command/threadPool/collapser) to know which annotation attribute is wrong","Move the named property to the correct attribute or fix its spelling (e.g. collapser properties: maxRequestsInBatch, timerDelayInMilliseconds, requestCache.enabled)","Cross-check names against the *_PROP_MAP constants in HystrixPropertiesManager for your javanica version","Re-run; failure is deterministic at setter initialization"],"exampleFix":"// before\n@HystrixCommand(threadPoolProperties = {\n    @HystrixProperty(name = \"execution.isolation.strategy\", value = \"THREAD\")\n})\n\n// after\n@HystrixCommand(commandProperties = {\n    @HystrixProperty(name = \"execution.isolation.strategy\", value = \"THREAD\")\n})","handlingStrategy":"validation","validationCode":"void checkProps(HystrixProperty[] props, Set<String> valid, String type) {\n  for (HystrixProperty p : props)\n    if (p.name() == null || p.name().trim().isEmpty() || !valid.contains(p.name()))\n      throw new IllegalStateException(\"unknown \" + type + \" property: \" + p.name());\n}\n// checkProps(ann.commandProperties(), COMMAND_PROP_MAP, \"command\");\n// checkProps(ann.threadPoolProperties(), TP_PROP_MAP, \"threadPool\");\n// checkProps(ann.collapserProperties(), COLLAPSER_PROP_MAP, \"collapser\");","typeGuard":null,"tryCatchPattern":"catch (IllegalArgumentException e) { if (e.getMessage().startsWith(\"unknown\")) { log.error(\"Property placed under wrong attribute or misspelled: {}\", e.getMessage()); } throw e; }","preventionTips":["Group @HystrixProperty blocks by attribute and review during PR","Use constants for property names shared across commands","Validate all annotations with a reflection scan at context startup"],"tags":["hystrix","javanica","configuration","properties","validation"],"backgroundTag":null,"analyzedSha":"5ce3bc58c38e7ca60ef2fe0e516e390e294ad941","analyzedAt":"2026-08-14T10:55:35.600Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}