{ "schema": "stella.callgraph.v1", "scanKey": "scan:spring-petclinic:3.2.0", "language": "Java", "artifacts": [ { "artifactKey": "spring-petclinic-3.2.0.jar", "kind": "jar", "sha256": "f4d3c2b1a0987654321fedcba0987654321fedcba0987654321fedcba098765", "purl": "pkg:maven/org.springframework.samples/spring-petclinic@3.2.0", "filePath": "/app/spring-petclinic-3.2.0.jar", "sizeBytes": 54321000 } ], "nodes": [ { "id": "j001", "nodeId": "j001", "name": "main", "kind": "method", "namespace": "org.springframework.samples.petclinic", "file": "PetClinicApplication.java", "line": 25, "symbolKey": "org.springframework.samples.petclinic.PetClinicApplication::main(String[])", "artifactKey": "spring-petclinic-3.2.0.jar", "visibility": "Public", "isEntrypointCandidate": true, "attributes": { "returnType": "void", "modifiers": "public static" }, "flags": 1 }, { "id": "j002", "nodeId": "j002", "name": "showOwner", "kind": "method", "namespace": "org.springframework.samples.petclinic.owner", "file": "OwnerController.java", "line": 87, "symbolKey": "org.springframework.samples.petclinic.owner.OwnerController::showOwner(int)", "artifactKey": "spring-petclinic-3.2.0.jar", "visibility": "Public", "isEntrypointCandidate": true, "attributes": { "returnType": "ModelAndView", "httpMethod": "GET", "route": "/owners/{ownerId}" }, "flags": 3 }, { "id": "j003", "nodeId": "j003", "name": "findById", "kind": "method", "namespace": "org.springframework.samples.petclinic.owner", "file": "OwnerRepository.java", "line": 42, "symbolKey": "org.springframework.samples.petclinic.owner.OwnerRepository::findById(Integer)", "artifactKey": "spring-petclinic-3.2.0.jar", "visibility": "Public", "isEntrypointCandidate": false, "attributes": { "returnType": "Owner" }, "flags": 0 }, { "id": "j004", "nodeId": "j004", "name": "validateOwner", "kind": "method", "namespace": "org.springframework.samples.petclinic.owner", "file": "OwnerValidator.java", "line": 30, "symbolKey": "org.springframework.samples.petclinic.owner.OwnerValidator::validateOwner(Owner)", "artifactKey": "spring-petclinic-3.2.0.jar", "visibility": "Protected", "isEntrypointCandidate": false, "flags": 0 } ], "edges": [ { "sourceId": "j001", "targetId": "j002", "from": "j001", "to": "j002", "type": "spring-bean", "kind": "Heuristic", "reason": "DiBinding", "weight": 0.85, "isResolved": true, "provenance": "SpringBoot" }, { "sourceId": "j002", "targetId": "j003", "from": "j002", "to": "j003", "type": "virtual", "kind": "Static", "reason": "VirtualCall", "weight": 1.0, "isResolved": true }, { "sourceId": "j002", "targetId": "j004", "from": "j002", "to": "j004", "type": "call", "kind": "Static", "reason": "DirectCall", "weight": 1.0, "offset": 156, "isResolved": true } ], "entrypoints": [ { "nodeId": "j001", "kind": "Main", "framework": "SpringBoot", "source": "annotation", "phase": "AppStart", "order": 0 }, { "nodeId": "j002", "kind": "Http", "route": "/owners/{ownerId}", "httpMethod": "GET", "framework": "Spring", "source": "annotation", "phase": "Runtime", "order": 1 } ], "metadata": { "toolId": "stellaops.scanner.java", "toolVersion": "1.0.0", "analysisTimestamp": "2025-01-15T11:00:00Z", "sourceCommit": "def789abc012", "buildId": "build-002" }, "id": "cg-java-spring-petclinic-001", "languageString": "java", "component": "spring-petclinic", "version": "3.2.0", "ingestedAt": "2025-01-15T11:00:00Z", "graphHash": "sha256:b2c3d4e5f6a7" }