# er-workspace/esign architecture

> Architecture diagram of the GitHub repository er-workspace/esign, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/er-workspace/esign
- Repository: https://github.com/er-workspace/esign

## Overview

#### Purpose and Deployment Model
This is a Java e-signing integration application packaged as a Maven web application. It exposes a Spring MVC flow for collecting an e-sign request, authenticating/initiating with an external signing provider, redirecting the user through signing, and handling the resulting signed-PDF response. No README or persistence layer is present.

Key build and deployment artifacts: `Esign/Esign/pom.xml`, `Esign/Esign/src/main/webapp/WEB-INF/web.xml`, `Esign/Esign/src/main/webapp/WEB-INF/spring-servlet.xml`.

#### Runtime Entry Points
A servlet container loads the application through `web.xml`; Spring MVC configuration supplies controller/component dispatching. The primary HTTP entry point is `Esign/Esign/src/main/java/com/unimoni/esigning/controller/EsignController.java`.

Server-rendered JSP pages start and support the browser-side request flow:
- `Esign/Esign/src/main/webapp/WEB-INF/views/initiateRequest.jsp`
- `Esign/Esign/src/main/webapp/WEB-INF/views/eSignRequest.jsp`

#### Request and Signing Orchestration
`EsignController` receives browser requests, binds form/request payloads, chooses views or redirects, and delegates signing operations rather than directly owning provider logic. Its service boundary is `Esign/Esign/src/main/java/com/unimoni/esigning/service/EsigningService.java`, implemented by `Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/EsigningServiceImpl.java`.

This controller → service split is the core control-flow boundary: web concerns and JSP navigation remain in the controller; authentication, provider request construction, response handling, and PDF-related processing belong in the service implementation.

#### Integration Payload Boundary
The `dao` package contains the application’s transport models for both inbound web data and external e-sign interactions. Important flow objects include:
- Signing initiation/request: `Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsignRequest.java`, `Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsigningRequest.java`
- Provider completion/result: `Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsigningResponse.java`, `Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsignPdfResponse.java`
- Login and redirect transitions: `Esign/Esign/src/main/java/com/unimoni/esigning/dao/LoginRequest.java`, `Esign/Esign/src/main/java/com/unimoni/esigning/dao/RedirectResponse.java`

These models form the explicit serialization/deserialization boundary between browser input, internal orchestration, and the signing service.

#### External Signing and Redirect Flow
The likely primary sequence is: user opens initiation JSP → controller accepts request → service authenticates or prepares provider payload → application returns a redirect/provider URL → user completes signing externally → application processes an e-sign response and exposes the signed PDF/result.

Provider endpoint/reference constants are centralized in `Esign/Esign/src/main/java/com/unimoni/esigning/constant/EndPointReferer.java`. External signing infrastructure is therefore represented as a synchronous HTTP/redirect integration, rather than an internally hosted signing engine.

#### Document Handling
PDF result handling is represented by `EsignPdfResponse` and a multipart-file adapter, `Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/CustomMultipartFile.java`. This indicates a boundary where provider-returned or generated document bytes are adapted to Spring’s file-upload/file-response conventions.

There is no visible repository-owned document store, database, queue, or asynchronous worker. Document lifecycle and durable storage, if any, are expected to be external to the code shown.

#### Configuration and Operational Boundaries
Application properties occur in both classpath and deployed-webapp locations: `Esign/Esign/src/main/resources/application.properties` and `Esign/Esign/src/main/webapp/WEB-INF/classes/application.properties`. These are likely the source of provider URL/credential and runtime settings; duplicate locations should be treated as a deployment-consistency risk.

The material runtime dependencies are Maven, Java, Spring MVC, JSP rendering, and a servlet container. The principal external service is the e-sign provider reached through configured endpoint references and browser redirects.

Main entry points: [`Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/EsigningServiceImpl.java`](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/EsigningServiceImpl.java) (E-Signing Service Impl), [`Esign/Esign/src/main/java/com/unimoni/esigning/controller/EsignController.java`](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/controller/EsignController.java) (Esign Controller), [`Esign/Esign/src/main/webapp/WEB-INF/views/initiateRequest.jsp`](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/views/initiateRequest.jsp) (Initiate Request JSP), [`Esign/Esign/src/main/webapp/WEB-INF/web.xml`](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/web.xml) (Servlet Container)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web MVC"]
  node_servlet{{"Servlet Container<br/>runtime host<br/>[web.xml]"}}
  node_spring["Spring MVC Config<br/>MVC dispatch<br/>[spring-servlet.xml]"]
  node_initiate_jsp["Initiate Request JSP<br/>server-rendered view"]
  node_esign_jsp["E-Sign Request JSP<br/>server-rendered view<br/>[eSignRequest.jsp]"]
  node_controller["Esign Controller<br/>Spring MVC controller"]
end

subgraph group_signing["Signing Orchestration"]
  node_service_contract["E-Signing Service<br/>service contract"]
  node_service_impl["E-Signing Service Impl<br/>signing orchestrator"]
  node_endpoints["Endpoint References<br/>provider endpoint constants"]
  node_multipart_adapter["Multipart File Adapter<br/>PDF adapter"]
end

subgraph group_models["Integration Payloads"]
  node_request_models["Signing Request Models<br/>transport models<br/>[EsignRequest.java]"]
  node_login_redirect["Login &amp; Redirect Models<br/>transport models<br/>[LoginRequest.java]"]
  node_response_models["Signing Response Models<br/>transport models"]
end

node_maven{{"Maven Webapp<br/>build package<br/>[pom.xml]"}}
node_properties["Provider Runtime Properties<br/>application settings"]
node_provider{{"External E-Sign Provider<br/>external signing service"}}
node_browser(("Browser User<br/>user agent"))

node_maven -->|"packages for deployment"| node_servlet
node_servlet -->|"loads MVC dispatcher"| node_spring
node_spring -->|"routes requests"| node_controller
node_browser -->|"opens"| node_initiate_jsp
node_initiate_jsp -->|"submits request"| node_controller
node_esign_jsp -->|"submits signing data"| node_controller
node_controller -->|"renders"| node_initiate_jsp
node_controller -->|"renders"| node_esign_jsp
node_controller -->|"delegates signing"| node_service_contract
node_service_contract -->|"implemented by"| node_service_impl
node_service_impl -->|"builds payloads"| node_request_models
node_service_impl -->|"authenticates and redirects"| node_login_redirect
node_service_impl -->|"deserializes results"| node_response_models
node_service_impl -->|"adapts PDF bytes"| node_multipart_adapter
node_service_impl -->|"uses endpoint references"| node_endpoints
node_properties -.->|"supplies runtime settings"| node_endpoints
node_service_impl -->|"HTTP initiation and response handling"| node_provider
node_browser -->|"follows signing redirect"| node_provider
node_provider -->|"returns signing result"| node_controller

click node_maven "https://github.com/er-workspace/esign/blob/main/Esign/Esign/pom.xml"
click node_servlet "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/web.xml"
click node_spring "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/spring-servlet.xml"
click node_initiate_jsp "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/views/initiateRequest.jsp"
click node_esign_jsp "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/views/eSignRequest.jsp"
click node_controller "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/controller/EsignController.java"
click node_service_contract "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/service/EsigningService.java"
click node_service_impl "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/EsigningServiceImpl.java"
click node_endpoints "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/constant/EndPointReferer.java"
click node_request_models "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsignRequest.java"
click node_login_redirect "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/dao/LoginRequest.java"
click node_response_models "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsigningResponse.java"
click node_multipart_adapter "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/CustomMultipartFile.java"
click node_properties "https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/resources/application.properties"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_servlet,node_spring,node_initiate_jsp,node_esign_jsp,node_controller toneBlue
class node_service_contract,node_service_impl,node_endpoints,node_multipart_adapter toneAmber
class node_request_models,node_login_redirect,node_response_models toneMint
class node_maven,node_properties,node_provider,node_browser toneNeutral
```

## Components

### Web MVC

- [Servlet Container](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/web.xml): runtime host · `Esign/Esign/src/main/webapp/WEB-INF/web.xml`
- [Spring MVC Config](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/spring-servlet.xml): MVC dispatch · `Esign/Esign/src/main/webapp/WEB-INF/spring-servlet.xml`
- [Initiate Request JSP](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/views/initiateRequest.jsp): server-rendered view · `Esign/Esign/src/main/webapp/WEB-INF/views/initiateRequest.jsp`
- [E-Sign Request JSP](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/webapp/WEB-INF/views/eSignRequest.jsp): server-rendered view · `Esign/Esign/src/main/webapp/WEB-INF/views/eSignRequest.jsp`
- [Esign Controller](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/controller/EsignController.java): Spring MVC controller · Binds browser input, selects views, and issues redirects. · `Esign/Esign/src/main/java/com/unimoni/esigning/controller/EsignController.java`

### Signing Orchestration

- [E-Signing Service](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/service/EsigningService.java): service contract · `Esign/Esign/src/main/java/com/unimoni/esigning/service/EsigningService.java`
- [E-Signing Service Impl](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/EsigningServiceImpl.java): signing orchestrator · Authenticates, builds provider requests, handles responses, and processes PDFs. · `Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/EsigningServiceImpl.java`
- [Endpoint References](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/constant/EndPointReferer.java): provider endpoint constants · `Esign/Esign/src/main/java/com/unimoni/esigning/constant/EndPointReferer.java`
- [Multipart File Adapter](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/CustomMultipartFile.java): PDF adapter · Adapts document bytes to Spring multipart conventions. · `Esign/Esign/src/main/java/com/unimoni/esigning/serviceimpl/CustomMultipartFile.java`

### Integration Payloads

- [Signing Request Models](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsignRequest.java): transport models · Browser and provider initiation payloads. · `Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsignRequest.java`
- [Login & Redirect Models](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/dao/LoginRequest.java): transport models · Authentication and redirect transitions. · `Esign/Esign/src/main/java/com/unimoni/esigning/dao/LoginRequest.java`
- [Signing Response Models](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsigningResponse.java): transport models · Provider completion and signed-PDF results. · `Esign/Esign/src/main/java/com/unimoni/esigning/dao/EsigningResponse.java`

### Other components

- [Maven Webapp](https://github.com/er-workspace/esign/blob/main/Esign/Esign/pom.xml): build package · Packages the Java application for servlet deployment. · `Esign/Esign/pom.xml`
- [Provider Runtime Properties](https://github.com/er-workspace/esign/blob/main/Esign/Esign/src/main/resources/application.properties): application settings · Duplicate classpath and webapp property locations risk deployment drift. · `Esign/Esign/src/main/resources/application.properties`
- **External E-Sign Provider**: external signing service · Synchronous HTTP and browser redirect signing integration.
- **Browser User**: user agent

## Connections

- Maven Webapp → Servlet Container: packages for deployment
- Servlet Container → Spring MVC Config: loads MVC dispatcher
- Spring MVC Config → Esign Controller: routes requests
- Browser User → Initiate Request JSP: opens
- Initiate Request JSP → Esign Controller: submits request
- E-Sign Request JSP → Esign Controller: submits signing data
- Esign Controller → Initiate Request JSP: renders
- Esign Controller → E-Sign Request JSP: renders
- Esign Controller → E-Signing Service: delegates signing
- E-Signing Service → E-Signing Service Impl: implemented by
- E-Signing Service Impl → Signing Request Models: builds payloads
- E-Signing Service Impl → Login & Redirect Models: authenticates and redirects
- E-Signing Service Impl → Signing Response Models: deserializes results
- E-Signing Service Impl → Multipart File Adapter: adapts PDF bytes
- E-Signing Service Impl → Endpoint References: uses endpoint references
- Provider Runtime Properties → Endpoint References: supplies runtime settings
- E-Signing Service Impl → External E-Sign Provider: HTTP initiation and response handling
- Browser User → External E-Sign Provider: follows signing redirect
- External E-Sign Provider → Esign Controller: returns signing result
