Files
git.stella-ops.org/docs/schemas/java-entrypoint-resolver.schema.json
StellaOps Bot 0de92144d2
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Findings Ledger CI / build-test (push) Has been cancelled
Findings Ledger CI / migration-validation (push) Has been cancelled
Findings Ledger CI / generate-manifest (push) Has been cancelled
mock-dev-release / package-mock-release (push) Has been cancelled
feat(api): Implement Console Export Client and Models
- Added ConsoleExportClient for managing export requests and responses.
- Introduced ConsoleExportRequest and ConsoleExportResponse models.
- Implemented methods for creating and retrieving exports with appropriate headers.

feat(crypto): Add Software SM2/SM3 Cryptography Provider

- Implemented SmSoftCryptoProvider for software-only SM2/SM3 cryptography.
- Added support for signing and verification using SM2 algorithm.
- Included hashing functionality with SM3 algorithm.
- Configured options for loading keys from files and environment gate checks.

test(crypto): Add unit tests for SmSoftCryptoProvider

- Created comprehensive tests for signing, verifying, and hashing functionalities.
- Ensured correct behavior for key management and error handling.

feat(api): Enhance Console Export Models

- Expanded ConsoleExport models to include detailed status and event types.
- Added support for various export formats and notification options.

test(time): Implement TimeAnchorPolicyService tests

- Developed tests for TimeAnchorPolicyService to validate time anchors.
- Covered scenarios for anchor validation, drift calculation, and policy enforcement.
2025-12-07 00:27:33 +02:00

1274 lines
34 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://stella-ops.org/schemas/java-entrypoint-resolver.schema.json",
"title": "StellaOps Java Entrypoint Resolver Schema",
"description": "Schema for Java-specific entrypoint resolution, bytecode analysis, reflection handling, and framework patterns. Unblocks Java Analyzer tasks 21-005 through 21-011 (7 tasks).",
"type": "object",
"definitions": {
"JavaEntrypointConfig": {
"type": "object",
"description": "Java-specific entrypoint resolution configuration",
"required": ["config_id", "java_version_range"],
"properties": {
"config_id": {
"type": "string"
},
"java_version_range": {
"type": "string",
"description": "Supported Java version range (e.g., >=8, 11-17, 21+)"
},
"version": {
"type": "string"
},
"bytecode_analysis": {
"$ref": "#/definitions/BytecodeAnalysisConfig"
},
"reflection_handling": {
"$ref": "#/definitions/ReflectionHandlingConfig"
},
"framework_resolvers": {
"type": "array",
"items": {
"$ref": "#/definitions/FrameworkResolver"
}
},
"annotation_processors": {
"type": "array",
"items": {
"$ref": "#/definitions/AnnotationProcessor"
}
},
"class_hierarchy_rules": {
"type": "array",
"items": {
"$ref": "#/definitions/ClassHierarchyRule"
}
},
"interface_implementation_rules": {
"type": "array",
"items": {
"$ref": "#/definitions/InterfaceImplementationRule"
}
},
"lambda_resolution": {
"$ref": "#/definitions/LambdaResolutionConfig"
},
"method_reference_resolution": {
"$ref": "#/definitions/MethodReferenceConfig"
},
"build_tool_integration": {
"$ref": "#/definitions/BuildToolIntegration"
}
}
},
"BytecodeAnalysisConfig": {
"type": "object",
"description": "Configuration for bytecode-level analysis",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"class_file_version_min": {
"type": "integer",
"description": "Minimum class file version (52 = Java 8)",
"default": 52
},
"class_file_version_max": {
"type": "integer",
"description": "Maximum class file version (65 = Java 21)",
"default": 65
},
"analyze_invoke_dynamic": {
"type": "boolean",
"default": true,
"description": "Analyze invokedynamic for lambdas and method refs"
},
"analyze_method_handles": {
"type": "boolean",
"default": true
},
"analyze_constant_pool": {
"type": "boolean",
"default": true
},
"stack_frame_analysis": {
"type": "boolean",
"default": false,
"description": "Perform stack frame analysis for data flow"
},
"instruction_patterns": {
"type": "array",
"items": {
"$ref": "#/definitions/InstructionPattern"
}
},
"max_method_size": {
"type": "integer",
"default": 65535,
"description": "Max bytecode bytes per method to analyze"
}
}
},
"InstructionPattern": {
"type": "object",
"description": "Bytecode instruction pattern for entry detection",
"required": ["pattern_id", "opcodes"],
"properties": {
"pattern_id": {
"type": "string"
},
"opcodes": {
"type": "array",
"items": {
"type": "string",
"enum": ["INVOKEVIRTUAL", "INVOKEINTERFACE", "INVOKESPECIAL", "INVOKESTATIC", "INVOKEDYNAMIC", "GETSTATIC", "PUTSTATIC", "GETFIELD", "PUTFIELD", "NEW", "ANEWARRAY", "CHECKCAST", "INSTANCEOF", "LDC", "LDC_W", "LDC2_W"]
}
},
"operand_pattern": {
"type": "string",
"description": "Regex pattern for operand (class/method reference)"
},
"entry_type": {
"type": "string",
"enum": ["main_method", "servlet_init", "servlet_service", "ejb_lifecycle", "jni_entry", "test_entry", "annotation_driven"]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"ReflectionHandlingConfig": {
"type": "object",
"description": "Configuration for handling reflection-based invocations",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"confidence_penalty": {
"type": "number",
"default": 0.3,
"description": "Confidence reduction for reflection-based paths"
},
"track_class_forname": {
"type": "boolean",
"default": true
},
"track_method_invoke": {
"type": "boolean",
"default": true
},
"track_constructor_newinstance": {
"type": "boolean",
"default": true
},
"track_proxy_creation": {
"type": "boolean",
"default": true
},
"string_constant_resolution": {
"type": "boolean",
"default": true,
"description": "Resolve string constants passed to Class.forName"
},
"known_reflection_patterns": {
"type": "array",
"items": {
"$ref": "#/definitions/ReflectionPattern"
}
},
"reflection_config_files": {
"type": "array",
"items": {
"type": "string"
},
"description": "GraalVM/Quarkus reflection config file paths"
}
}
},
"ReflectionPattern": {
"type": "object",
"description": "Known reflection usage pattern",
"required": ["pattern_id", "class_pattern", "method_pattern"],
"properties": {
"pattern_id": {
"type": "string"
},
"class_pattern": {
"type": "string",
"description": "Regex for target class"
},
"method_pattern": {
"type": "string",
"description": "Regex for target method"
},
"resolution_strategy": {
"type": "string",
"enum": ["string_constant", "config_file", "annotation_hint", "heuristic"]
},
"entry_type_hint": {
"type": "string"
}
}
},
"FrameworkResolver": {
"type": "object",
"description": "Framework-specific entrypoint resolver",
"required": ["framework_id", "name", "detection_strategy"],
"properties": {
"framework_id": {
"type": "string"
},
"name": {
"type": "string"
},
"version_range": {
"type": "string"
},
"detection_strategy": {
"$ref": "#/definitions/FrameworkDetection"
},
"entrypoint_rules": {
"type": "array",
"items": {
"$ref": "#/definitions/FrameworkEntrypointRule"
}
},
"lifecycle_callbacks": {
"type": "array",
"items": {
"$ref": "#/definitions/LifecycleCallback"
}
},
"dependency_injection": {
"$ref": "#/definitions/DependencyInjectionConfig"
},
"aop_support": {
"$ref": "#/definitions/AopConfig"
}
}
},
"FrameworkDetection": {
"type": "object",
"description": "How to detect framework presence",
"properties": {
"marker_classes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Classes that indicate framework presence"
},
"marker_annotations": {
"type": "array",
"items": {
"type": "string"
}
},
"pom_dependencies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Maven coordinates (groupId:artifactId)"
},
"gradle_dependencies": {
"type": "array",
"items": {
"type": "string"
}
},
"config_files": {
"type": "array",
"items": {
"type": "string"
},
"description": "Config files indicating framework (e.g., application.properties)"
}
}
},
"FrameworkEntrypointRule": {
"type": "object",
"description": "Rule for detecting framework-specific entrypoints",
"required": ["rule_id", "type"],
"properties": {
"rule_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["annotation", "interface", "superclass", "method_name", "xml_config", "properties_config"]
},
"annotation_fqcn": {
"type": "string",
"description": "Fully qualified annotation class name"
},
"annotation_attributes": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Required annotation attributes"
},
"interface_fqcn": {
"type": "string"
},
"superclass_fqcn": {
"type": "string"
},
"method_signature_pattern": {
"type": "string"
},
"xml_xpath": {
"type": "string",
"description": "XPath for XML-configured entries"
},
"entry_type": {
"type": "string",
"enum": ["http_endpoint", "grpc_method", "message_consumer", "scheduled_job", "event_handler", "ejb_method", "servlet_method", "jax_rs_resource", "graphql_resolver", "websocket_handler"]
},
"metadata_extraction": {
"$ref": "#/definitions/JavaMetadataExtraction"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"JavaMetadataExtraction": {
"type": "object",
"description": "Rules for extracting metadata from Java entrypoints",
"properties": {
"http_method_from": {
"type": "string",
"description": "Expression to extract HTTP method"
},
"path_from": {
"type": "string",
"description": "Expression to extract path"
},
"consumes_from": {
"type": "string"
},
"produces_from": {
"type": "string"
},
"security_annotation": {
"type": "string"
},
"role_annotation": {
"type": "string"
},
"transaction_annotation": {
"type": "string"
}
}
},
"LifecycleCallback": {
"type": "object",
"description": "Framework lifecycle callback as potential entrypoint",
"required": ["callback_id", "type"],
"properties": {
"callback_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["post_construct", "pre_destroy", "init", "destroy", "startup", "shutdown", "context_initialized", "context_destroyed"]
},
"annotation_fqcn": {
"type": "string"
},
"interface_method": {
"type": "string"
},
"execution_phase": {
"type": "string",
"enum": ["startup", "runtime", "shutdown"]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"DependencyInjectionConfig": {
"type": "object",
"description": "Dependency injection analysis configuration",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"inject_annotations": {
"type": "array",
"items": {
"type": "string"
},
"default": ["javax.inject.Inject", "jakarta.inject.Inject", "org.springframework.beans.factory.annotation.Autowired", "com.google.inject.Inject"]
},
"qualifier_annotations": {
"type": "array",
"items": {
"type": "string"
}
},
"scope_annotations": {
"type": "array",
"items": {
"type": "string"
}
},
"track_bean_creation": {
"type": "boolean",
"default": true
}
}
},
"AopConfig": {
"type": "object",
"description": "Aspect-Oriented Programming support",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"aspect_annotations": {
"type": "array",
"items": {
"type": "string"
},
"default": ["org.aspectj.lang.annotation.Aspect"]
},
"pointcut_annotations": {
"type": "array",
"items": {
"type": "string"
},
"default": ["org.aspectj.lang.annotation.Before", "org.aspectj.lang.annotation.After", "org.aspectj.lang.annotation.Around"]
},
"track_interceptors": {
"type": "boolean",
"default": true
}
}
},
"AnnotationProcessor": {
"type": "object",
"description": "Annotation-based entrypoint processor",
"required": ["processor_id", "annotation_fqcn"],
"properties": {
"processor_id": {
"type": "string"
},
"annotation_fqcn": {
"type": "string",
"description": "Fully qualified class name of annotation"
},
"target_types": {
"type": "array",
"items": {
"type": "string",
"enum": ["TYPE", "METHOD", "FIELD", "PARAMETER", "CONSTRUCTOR", "LOCAL_VARIABLE", "ANNOTATION_TYPE", "PACKAGE", "TYPE_PARAMETER", "TYPE_USE"]
}
},
"required_attributes": {
"type": "array",
"items": {
"type": "string"
}
},
"entry_type": {
"type": "string"
},
"metadata_mapping": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Maps annotation attributes to metadata fields"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"ClassHierarchyRule": {
"type": "object",
"description": "Rule based on class hierarchy (extends)",
"required": ["rule_id", "superclass_fqcn"],
"properties": {
"rule_id": {
"type": "string"
},
"superclass_fqcn": {
"type": "string"
},
"entry_methods": {
"type": "array",
"items": {
"type": "string"
},
"description": "Method signatures that are entrypoints"
},
"entry_type": {
"type": "string"
},
"include_indirect": {
"type": "boolean",
"default": true,
"description": "Include indirect subclasses"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"InterfaceImplementationRule": {
"type": "object",
"description": "Rule based on interface implementation",
"required": ["rule_id", "interface_fqcn"],
"properties": {
"rule_id": {
"type": "string"
},
"interface_fqcn": {
"type": "string"
},
"entry_methods": {
"type": "array",
"items": {
"type": "string"
}
},
"entry_type": {
"type": "string"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"LambdaResolutionConfig": {
"type": "object",
"description": "Configuration for resolving lambda expressions",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"track_functional_interfaces": {
"type": "boolean",
"default": true
},
"known_functional_interfaces": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"java.lang.Runnable",
"java.util.concurrent.Callable",
"java.util.function.Consumer",
"java.util.function.Supplier",
"java.util.function.Function",
"java.util.function.Predicate",
"java.util.function.BiConsumer",
"java.util.function.BiFunction"
]
},
"track_lambda_capture": {
"type": "boolean",
"default": true,
"description": "Track captured variables in lambdas"
},
"confidence_for_lambda": {
"type": "number",
"default": 0.8
}
}
},
"MethodReferenceConfig": {
"type": "object",
"description": "Configuration for resolving method references",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"reference_types": {
"type": "array",
"items": {
"type": "string",
"enum": ["STATIC", "BOUND", "UNBOUND", "CONSTRUCTOR"]
},
"default": ["STATIC", "BOUND", "UNBOUND", "CONSTRUCTOR"]
},
"confidence_for_reference": {
"type": "number",
"default": 0.9
}
}
},
"BuildToolIntegration": {
"type": "object",
"description": "Build tool integration for classpath resolution",
"properties": {
"maven": {
"$ref": "#/definitions/MavenConfig"
},
"gradle": {
"$ref": "#/definitions/GradleConfig"
},
"ant": {
"$ref": "#/definitions/AntConfig"
}
}
},
"MavenConfig": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"resolve_dependencies": {
"type": "boolean",
"default": true
},
"include_test_scope": {
"type": "boolean",
"default": false
},
"profiles_to_activate": {
"type": "array",
"items": {
"type": "string"
}
},
"settings_xml_path": {
"type": "string"
},
"local_repo_path": {
"type": "string"
}
}
},
"GradleConfig": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"resolve_dependencies": {
"type": "boolean",
"default": true
},
"configurations": {
"type": "array",
"items": {
"type": "string"
},
"default": ["compileClasspath", "runtimeClasspath"]
},
"init_script_path": {
"type": "string"
}
}
},
"AntConfig": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": false
},
"build_file_path": {
"type": "string",
"default": "build.xml"
},
"target": {
"type": "string"
}
}
},
"ResolvedEntrypoint": {
"type": "object",
"description": "Resolved Java entrypoint",
"required": ["entry_id", "class_fqcn", "method_signature", "entry_type"],
"properties": {
"entry_id": {
"type": "string"
},
"class_fqcn": {
"type": "string",
"description": "Fully qualified class name"
},
"method_signature": {
"type": "string",
"description": "JVM method signature"
},
"method_name": {
"type": "string"
},
"method_descriptor": {
"type": "string",
"description": "JVM method descriptor (e.g., (Ljava/lang/String;)V)"
},
"entry_type": {
"type": "string",
"enum": ["http_endpoint", "grpc_method", "message_consumer", "scheduled_job", "event_handler", "ejb_method", "servlet_method", "jax_rs_resource", "graphql_resolver", "websocket_handler", "main_method", "junit_test", "testng_test", "cli_command"]
},
"source_location": {
"$ref": "#/definitions/JavaSourceLocation"
},
"bytecode_location": {
"$ref": "#/definitions/BytecodeLocation"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"resolution_path": {
"type": "array",
"items": {
"type": "string"
},
"description": "Chain of rules that resolved this entrypoint"
},
"framework": {
"type": "string"
},
"http_metadata": {
"$ref": "#/definitions/JavaHttpMetadata"
},
"parameters": {
"type": "array",
"items": {
"$ref": "#/definitions/JavaParameter"
}
},
"return_type": {
"type": "string"
},
"throws_types": {
"type": "array",
"items": {
"type": "string"
}
},
"annotations": {
"type": "array",
"items": {
"$ref": "#/definitions/JavaAnnotation"
}
},
"modifiers": {
"type": "array",
"items": {
"type": "string",
"enum": ["PUBLIC", "PRIVATE", "PROTECTED", "STATIC", "FINAL", "SYNCHRONIZED", "NATIVE", "ABSTRACT", "STRICTFP"]
}
},
"symbol_id": {
"type": "string",
"pattern": "^sym:java:[A-Za-z0-9_-]+$",
"description": "RichGraph SymbolID"
},
"taint_sources": {
"type": "array",
"items": {
"$ref": "#/definitions/TaintSource"
}
}
}
},
"JavaSourceLocation": {
"type": "object",
"description": "Source code location",
"properties": {
"file_path": {
"type": "string"
},
"line_start": {
"type": "integer"
},
"line_end": {
"type": "integer"
},
"column_start": {
"type": "integer"
},
"column_end": {
"type": "integer"
},
"source_root": {
"type": "string"
}
}
},
"BytecodeLocation": {
"type": "object",
"description": "Bytecode location",
"properties": {
"jar_path": {
"type": "string"
},
"class_file_path": {
"type": "string"
},
"method_index": {
"type": "integer"
},
"bytecode_offset": {
"type": "integer"
},
"class_file_version": {
"type": "integer"
}
}
},
"JavaHttpMetadata": {
"type": "object",
"description": "HTTP endpoint metadata for Java",
"properties": {
"method": {
"type": "string",
"enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS", "TRACE"]
},
"path": {
"type": "string"
},
"path_variables": {
"type": "array",
"items": {
"type": "string"
}
},
"request_params": {
"type": "array",
"items": {
"type": "string"
}
},
"headers": {
"type": "array",
"items": {
"type": "string"
}
},
"consumes": {
"type": "array",
"items": {
"type": "string"
}
},
"produces": {
"type": "array",
"items": {
"type": "string"
}
},
"security_constraints": {
"$ref": "#/definitions/SecurityConstraints"
}
}
},
"SecurityConstraints": {
"type": "object",
"properties": {
"authentication_required": {
"type": "boolean"
},
"roles_allowed": {
"type": "array",
"items": {
"type": "string"
}
},
"security_annotation": {
"type": "string"
},
"csrf_protection": {
"type": "boolean"
}
}
},
"JavaParameter": {
"type": "object",
"description": "Method parameter",
"properties": {
"name": {
"type": "string"
},
"type_fqcn": {
"type": "string"
},
"type_descriptor": {
"type": "string"
},
"generic_type": {
"type": "string"
},
"index": {
"type": "integer"
},
"source": {
"type": "string",
"enum": ["path", "query", "header", "body", "form", "cookie", "matrix", "bean"]
},
"required": {
"type": "boolean"
},
"default_value": {
"type": "string"
},
"validation_annotations": {
"type": "array",
"items": {
"type": "string"
}
},
"is_taint_source": {
"type": "boolean",
"description": "Whether this parameter is a potential taint source"
}
}
},
"JavaAnnotation": {
"type": "object",
"description": "Annotation on entrypoint",
"properties": {
"fqcn": {
"type": "string"
},
"attributes": {
"type": "object",
"additionalProperties": true
},
"retention": {
"type": "string",
"enum": ["SOURCE", "CLASS", "RUNTIME"]
}
}
},
"TaintSource": {
"type": "object",
"description": "Taint source information",
"properties": {
"parameter_index": {
"type": "integer"
},
"parameter_name": {
"type": "string"
},
"taint_type": {
"type": "string",
"enum": ["user_input", "file_input", "network_input", "database_input", "environment"]
},
"sanitization_required": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"JavaEntrypointReport": {
"type": "object",
"description": "Java entrypoint resolution report",
"required": ["report_id", "scan_id", "entrypoints"],
"properties": {
"report_id": {
"type": "string",
"format": "uuid"
},
"scan_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"config_used": {
"type": "string"
},
"java_version_detected": {
"type": "string"
},
"entrypoints": {
"type": "array",
"items": {
"$ref": "#/definitions/ResolvedEntrypoint"
}
},
"frameworks_detected": {
"type": "array",
"items": {
"$ref": "#/definitions/DetectedFramework"
}
},
"statistics": {
"$ref": "#/definitions/JavaEntrypointStatistics"
},
"build_info": {
"$ref": "#/definitions/BuildInfo"
},
"analysis_warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"analysis_duration_ms": {
"type": "integer"
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
}
},
"DetectedFramework": {
"type": "object",
"properties": {
"framework_id": {
"type": "string"
},
"name": {
"type": "string"
},
"version": {
"type": "string"
},
"detection_confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"detection_evidence": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"JavaEntrypointStatistics": {
"type": "object",
"properties": {
"total_entrypoints": {
"type": "integer"
},
"by_type": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"by_framework": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"by_confidence": {
"type": "object",
"properties": {
"high": {
"type": "integer"
},
"medium": {
"type": "integer"
},
"low": {
"type": "integer"
}
}
},
"classes_analyzed": {
"type": "integer"
},
"methods_analyzed": {
"type": "integer"
},
"reflection_usages": {
"type": "integer"
},
"lambda_expressions": {
"type": "integer"
},
"taint_sources_identified": {
"type": "integer"
}
}
},
"BuildInfo": {
"type": "object",
"properties": {
"build_tool": {
"type": "string",
"enum": ["maven", "gradle", "ant", "unknown"]
},
"java_source_version": {
"type": "string"
},
"java_target_version": {
"type": "string"
},
"modules_detected": {
"type": "array",
"items": {
"type": "string"
}
},
"dependencies_count": {
"type": "integer"
}
}
}
},
"properties": {
"configs": {
"type": "array",
"items": {
"$ref": "#/definitions/JavaEntrypointConfig"
}
},
"reports": {
"type": "array",
"items": {
"$ref": "#/definitions/JavaEntrypointReport"
}
}
},
"examples": [
{
"configs": [
{
"config_id": "java-spring-resolver",
"java_version_range": ">=11",
"version": "1.0.0",
"bytecode_analysis": {
"enabled": true,
"class_file_version_min": 55,
"class_file_version_max": 65,
"analyze_invoke_dynamic": true,
"analyze_method_handles": true,
"analyze_constant_pool": true,
"stack_frame_analysis": false,
"max_method_size": 65535
},
"reflection_handling": {
"enabled": true,
"confidence_penalty": 0.3,
"track_class_forname": true,
"track_method_invoke": true,
"track_constructor_newinstance": true,
"track_proxy_creation": true,
"string_constant_resolution": true
},
"framework_resolvers": [
{
"framework_id": "spring-boot",
"name": "Spring Boot",
"version_range": ">=2.0.0",
"detection_strategy": {
"marker_classes": ["org.springframework.boot.SpringApplication"],
"marker_annotations": ["org.springframework.boot.autoconfigure.SpringBootApplication"],
"pom_dependencies": ["org.springframework.boot:spring-boot-starter"]
},
"entrypoint_rules": [
{
"rule_id": "spring-get-mapping",
"type": "annotation",
"annotation_fqcn": "org.springframework.web.bind.annotation.GetMapping",
"entry_type": "http_endpoint",
"metadata_extraction": {
"http_method_from": "GET",
"path_from": "value || path"
},
"confidence": 0.98
},
{
"rule_id": "spring-post-mapping",
"type": "annotation",
"annotation_fqcn": "org.springframework.web.bind.annotation.PostMapping",
"entry_type": "http_endpoint",
"metadata_extraction": {
"http_method_from": "POST",
"path_from": "value || path"
},
"confidence": 0.98
},
{
"rule_id": "spring-scheduled",
"type": "annotation",
"annotation_fqcn": "org.springframework.scheduling.annotation.Scheduled",
"entry_type": "scheduled_job",
"confidence": 0.95
}
],
"lifecycle_callbacks": [
{
"callback_id": "spring-post-construct",
"type": "post_construct",
"annotation_fqcn": "javax.annotation.PostConstruct",
"execution_phase": "startup",
"confidence": 0.85
}
],
"dependency_injection": {
"enabled": true,
"inject_annotations": ["org.springframework.beans.factory.annotation.Autowired", "javax.inject.Inject"],
"track_bean_creation": true
},
"aop_support": {
"enabled": true,
"track_interceptors": true
}
}
],
"lambda_resolution": {
"enabled": true,
"track_functional_interfaces": true,
"track_lambda_capture": true,
"confidence_for_lambda": 0.8
},
"method_reference_resolution": {
"enabled": true,
"reference_types": ["STATIC", "BOUND", "UNBOUND", "CONSTRUCTOR"],
"confidence_for_reference": 0.9
},
"build_tool_integration": {
"maven": {
"enabled": true,
"resolve_dependencies": true,
"include_test_scope": false
},
"gradle": {
"enabled": true,
"resolve_dependencies": true,
"configurations": ["compileClasspath", "runtimeClasspath"]
}
}
}
]
}
]
}