This is an automated email from the ASF dual-hosted git repository. robertlazarski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git
commit e737be145e51f6e5fd8bad0f7779a656f48d94f5 Author: Robert Lazarski <[email protected]> AuthorDate: Sat Apr 11 08:35:22 2026 -1000 Modernize Architecture Guide; add SOAP/MCP disclaimer Architecture Guide (Axis2ArchitectureGuide.xml): - Add modern lead section: multi-protocol platform overview, handler chain as differentiator, deployment targets table, What's New in 2.0 (JSON-RPC, OpenAPI, MCP, HTTP/2, mTLS), text architecture diagram showing shared pipeline, "Where to Contribute" section for new committers - Preserve all original 2004-2005 SOAP architecture content under "Classic SOAP Architecture Reference" heading - Cross-references to spring-boot-starter, mcp-architecture, and json-rpc-mcp-guide docs MCP Guide (json-rpc-mcp-guide.xml): - Add legacy SOAP disclaimer: MCP requires JSON-RPC, SOAP services must convert first (config change, not code change) Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --- src/site/xdoc/docs/Axis2ArchitectureGuide.xml | 355 +++++++++++++++++++++----- src/site/xdoc/docs/json-rpc-mcp-guide.xml | 7 + 2 files changed, 293 insertions(+), 69 deletions(-) diff --git a/src/site/xdoc/docs/Axis2ArchitectureGuide.xml b/src/site/xdoc/docs/Axis2ArchitectureGuide.xml index 23d3ce9759..b569fe9744 100644 --- a/src/site/xdoc/docs/Axis2ArchitectureGuide.xml +++ b/src/site/xdoc/docs/Axis2ArchitectureGuide.xml @@ -29,81 +29,298 @@ </head> <body lang="en-US" dir="ltr" xml:lang="en-US"> <h1 align="center">Apache Axis2 Architecture Guide</h1> -<p>This document gives an introduction to Axis2's modular -architecture with explanations on every module.</p> + +<p>Apache Axis2 has a twenty-year proven architecture that now serves modern +protocols. What began as a SOAP processing engine in 2004 has evolved into a +multi-protocol service platform -- deploying JSON-RPC, REST with OpenAPI, +Model Context Protocol (MCP), and classic SOAP services from a single +codebase and a single handler chain. This guide explains why that matters +and how to get involved.</p> + +<!-- =============================================================== --> +<!-- MODERN OVERVIEW (2026) --> +<!-- =============================================================== --> + <h2>Contents</h2> <ul> -<li><a href="#bmBP">The Big Picture</a></li> -<li> -<p><a href="#requirements">Requirement of Axis2</a></p> -</li> -<li><a href="#thearchi">Axis2 Architecture</a> -<ul> -<li> -<p><a href="#bmcore">Core Modules</a></p> -</li> -<li><a href="#bmother">Other Modules</a></li> -<li> -<p><a href="#bmInfoMod">Information Model</a></p> -</li> -<li><a href="#bmXML">XML Processing Model</a></li> -<li> -<p><a href="#bmSOAPPM">SOAP Processing Model</a></p> -<ul> -<li><a href="#default">Axis2 Default Processing Model</a></li> -<li> -<p><a href="#incomingsoap">Processing an Incoming SOAP -Message</a></p> -</li> -<li><a href="#outgoing">Processing of the Outgoing Message</a></li> -<li> -<p><a href="#extending">Extending the SOAP Processing Model</a></p> -<ul> -<li><a href="#extendingwithhandlers">Extending the SOAP Processing -Model with Handlers</a></li> -<li> -<p><a href="#extendingwithmodules">Extending the SOAP Processing -Model with Modules</a></p> -</li> -</ul> -</li> -</ul> -</li> -<li><a href="#bmDeployment">Deployment</a> -<ul> -<li><a href="#xmlfile">The <em>axis2.xml</em> file</a></li> -<li> -<p><a href="#servicearchive">Service Archive</a></p> +<li><a href="#modern-overview">Axis2 in 2026: Multi-Protocol Platform</a> + <ul> + <li><a href="#handler-chain-differentiator">The Handler Chain as Architectural Differentiator</a></li> + <li><a href="#modern-deployment">Modern Deployment Targets</a></li> + <li><a href="#whats-new-2">What's New in 2.0</a></li> + <li><a href="#architecture-at-a-glance">Architecture at a Glance</a></li> + <li><a href="#contributing">Where to Contribute</a></li> + </ul> </li> -<li><a href="#modulearchive">Module Archive</a></li> -</ul> -</li> -<li> -<p><a href="#bmClientAPI">Client API</a></p> -<ul> -<li><a href="#oneway">One Way Messaging Support</a></li> -<li> -<p><a href="#requestresponse">Request Response Messaging -Support</a></p> +<li><a href="#classic-architecture">Classic SOAP Architecture Reference</a> + <ul> + <li><a href="#bmBP">The Big Picture</a></li> + <li><a href="#requirements">Requirement of Axis2</a></li> + <li><a href="#thearchi">Axis2 Architecture</a> + <ul> + <li><a href="#bmcore">Core Modules</a></li> + <li><a href="#bmother">Other Modules</a></li> + <li><a href="#bmInfoMod">Information Model</a></li> + <li><a href="#bmXML">XML Processing Model</a></li> + <li><a href="#bmSOAPPM">SOAP Processing Model</a> + <ul> + <li><a href="#default">Axis2 Default Processing Model</a></li> + <li><a href="#incomingsoap">Processing an Incoming SOAP Message</a></li> + <li><a href="#outgoing">Processing of the Outgoing Message</a></li> + <li><a href="#extending">Extending the SOAP Processing Model</a> + <ul> + <li><a href="#extendingwithhandlers">Extending the SOAP Processing Model with Handlers</a></li> + <li><a href="#extendingwithmodules">Extending the SOAP Processing Model with Modules</a></li> + </ul> + </li> + </ul> + </li> + <li><a href="#bmDeployment">Deployment</a> + <ul> + <li><a href="#xmlfile">The <em>axis2.xml</em> file</a></li> + <li><a href="#servicearchive">Service Archive</a></li> + <li><a href="#modulearchive">Module Archive</a></li> + </ul> + </li> + <li><a href="#bmClientAPI">Client API</a> + <ul> + <li><a href="#oneway">One Way Messaging Support</a></li> + <li><a href="#requestresponse">Request Response Messaging Support</a></li> + </ul> + </li> + <li><a href="#bmTransports">Transports</a></li> + <li><a href="#bmWSDL">Code Generation</a></li> + <li><a href="#bmDB">Data Binding</a> + <ul> + <li><a href="#integration">Integration with Code Generation Engine</a></li> + <li><a href="#serial">Serialization and De-Serialization</a></li> + </ul> + </li> + </ul> + </li> + </ul> </li> </ul> -</li> -<li><a href="#bmTransports">Transports</a></li> -<li> -<p><a href="#bmWSDL">Code Generation</a></p> -</li> -<li><a href="#bmDB">Data Binding</a> + +<!-- =============================================================== --> +<a name="modern-overview" id="modern-overview"></a> +<h2>Axis2 in 2026: Multi-Protocol Platform</h2> + +<p>Axis2 2.0 delivers JSON-RPC, REST+OpenAPI, Model Context Protocol (MCP), +and classic SOAP -- all from one deployment artifact, all processed by the +same handler chain. A service written as a plain Java class can simultaneously +accept SOAP/XML requests, JSON-RPC calls, RESTful HTTP requests with +auto-generated OpenAPI documentation, and MCP tool invocations. No separate +frameworks, no glue code, no protocol-specific deployment descriptors.</p> + +<p>This is possible because the handler-chain architecture designed in 2004 +was protocol-agnostic from the start. Messages enter a pipeline of phases +and handlers regardless of wire format. Axis2 2.0 extends that pipeline with +new dispatchers and message receivers that understand JSON and MCP, while +every existing SOAP handler, module, and service continues to work +unchanged.</p> + +<!-- =============================================================== --> +<a name="handler-chain-differentiator" id="handler-chain-differentiator"></a> +<h3>The Handler Chain as Architectural Differentiator</h3> + +<p>The handler chain is the single most important concept in Axis2. Every +inbound message -- whether it carries a SOAP envelope, a JSON-RPC request, or +an MCP tool call -- flows through the same sequence of phases:</p> + +<ol> +<li><strong>Transport Phase</strong> -- transport-level processing (HTTP +headers, TLS client certificates, HTTP/2 stream management).</li> +<li><strong>Pre-Dispatch Phase</strong> -- populates the MessageContext with +addressing information, content-type sniffing, and protocol detection.</li> +<li><strong>Dispatch Phase</strong> -- dispatchers identify the target service +and operation. The new <code>JSONBasedDefaultDispatcher</code> handles +JSON-RPC method resolution alongside the classic URI, SOAP-action, and +WS-Addressing dispatchers.</li> +<li><strong>User Phases</strong> -- custom handlers for logging, security +policy enforcement, rate limiting, or any cross-cutting concern.</li> +<li><strong>Message Receiver</strong> -- the terminal handler that delivers +the message to your service implementation. SOAP messages reach the classic +<code>RawXMLINOutMessageReceiver</code>; JSON-RPC calls reach the new +<code>JsonRpcMessageReceiver</code>; MCP invocations reach the +<code>McpToolMessageReceiver</code>.</li> +</ol> + +<p>Because security handlers, logging handlers, and WS-Addressing handlers +sit in the chain <em>before</em> dispatch, they apply uniformly to every +protocol. You write a handler once and it protects SOAP, JSON-RPC, REST, +and MCP traffic alike.</p> + +<!-- =============================================================== --> +<a name="modern-deployment" id="modern-deployment"></a> +<h3>Modern Deployment Targets</h3> + +<p>Axis2 2.0 runs on current Java platforms and application servers:</p> + +<table border="1" cellpadding="4" cellspacing="0"> +<tr> +<th>Target</th> +<th>Details</th> +</tr> +<tr> +<td><strong>Spring Boot Starter</strong></td> +<td>Auto-configures Axis2 as an embedded servlet. Add the starter +dependency and your services are live. See +<a href="spring-boot-starter.html">Spring Boot Starter Guide</a>.</td> +</tr> +<tr> +<td><strong>Apache Tomcat 11</strong></td> +<td>Deploy as a standard WAR with Jakarta Servlet 6.0 support.</td> +</tr> +<tr> +<td><strong>WildFly 32 / 39</strong></td> +<td>Deploy as a WAR or EAR. Axis2 integrates with the WildFly +class-loading and JNDI subsystems.</td> +</tr> +<tr> +<td><strong>OpenJDK 21 / 25</strong></td> +<td>Fully tested on the current LTS and latest OpenJDK releases. +Virtual threads (Project Loom) are supported for high-concurrency +deployments.</td> +</tr> +</table> + +<!-- =============================================================== --> +<a name="whats-new-2" id="whats-new-2"></a> +<h3>What's New in 2.0</h3> + +<p>The following features are new or substantially reworked in Axis2 2.0:</p> + +<dl> +<dt><strong>JSON-RPC Message Receivers</strong></dt> +<dd>The <code>JsonRpcMessageReceiver</code> and +<code>JsonRpcInOnlyMessageReceiver</code> allow any Axis2 service to accept +JSON-RPC 2.0 calls. No WSDL required -- method names map directly to +operations. See the +<a href="json-rpc-mcp-guide.html">JSON-RPC and MCP Guide</a>.</dd> + +<dt><strong>JSONBasedDefaultDispatcher</strong></dt> +<dd>A new dispatcher that examines the JSON-RPC <code>method</code> field +to resolve the target service and operation, complementing the existing +URI-based, SOAP-action-based, and WS-Addressing-based dispatchers.</dd> + +<dt><strong>OpenAPI Auto-Generation</strong></dt> +<dd>Axis2 can generate an OpenAPI 3.1 specification from any deployed +service, making REST endpoints discoverable by standard tooling and API +gateways.</dd> + +<dt><strong>MCP Tool Catalogs</strong></dt> +<dd>Services can expose operations as Model Context Protocol tools, +allowing AI agents and LLM-based systems to discover and invoke them. +See the <a href="mcp-architecture.html">MCP Architecture Guide</a>.</dd> + +<dt><strong>HTTP/2 Transport</strong></dt> +<dd>The new HTTP/2-capable transport, built on Apache HttpComponents 5, +supports multiplexed streams, server push, and HTTPS-only deployments.</dd> + +<dt><strong>mTLS and X.509 Security</strong></dt> +<dd>Mutual TLS authentication with X.509 client certificates is supported +natively, alongside JWT bearer tokens, providing dual-auth capability on +HTTPS endpoints.</dd> +</dl> + +<!-- =============================================================== --> +<a name="architecture-at-a-glance" id="architecture-at-a-glance"></a> +<h3>Architecture at a Glance</h3> + +<p>The following text diagram shows the request flow for all protocols:</p> + +<pre> + HTTP/HTTPS Request (SOAP, JSON-RPC, REST, or MCP) + | + v + +------------------+ + | AxisServlet | (or Spring Boot auto-configured servlet) + +------------------+ + | + v + +------------------+ + | Transport Phase | HTTP headers, TLS certs, HTTP/2 streams + +------------------+ + | + v + +------------------+ + | Pre-Dispatch | Content-type detection, WS-Addressing + +------------------+ + | + v + +------------------+ + | Dispatch Phase | URIBasedDispatcher (REST) + | | SOAPActionBasedDispatcher (SOAP) + | | JSONBasedDefaultDispatcher (JSON-RPC) + | | AddressingBasedDispatcher (WS-A) + +------------------+ + | + v + +------------------+ + | User Phases | Security, logging, custom handlers + +------------------+ + | + v + +--------------------------------------------------+ + | Message Receiver (chosen per-operation) | + | | + | SOAP: RawXMLINOutMessageReceiver | + | JSON-RPC: JsonRpcMessageReceiver | + | MCP: McpToolMessageReceiver | + +--------------------------------------------------+ + | + v + +------------------+ + | Service Impl | Your plain Java class + +------------------+ +</pre> + +<p>The key insight: everything above the Message Receiver line is shared +infrastructure. Protocol-specific behavior is isolated to the dispatcher +(which routes) and the message receiver (which deserializes). Your service +implementation is protocol-unaware.</p> + +<!-- =============================================================== --> +<a name="contributing" id="contributing"></a> +<h3>Where to Contribute</h3> + +<p>Axis2 is undergoing active modernization. The following areas need +contributors:</p> + <ul> -<li><a href="#integration">Integration with Code Generation -Engine</a></li> -<li> -<p><a href="#serial">Serialization and De-Serialization</a></p> -</li> -</ul> -</li> -</ul> -</li> +<li><strong>Embedded Tomcat support</strong> -- A lightweight embedded +Tomcat launcher (similar to the existing <code>SimpleHTTPServer</code> but +based on Tomcat 11) would simplify development and testing without requiring +a full application server.</li> +<li><strong>Native MCP transport</strong> -- The current MCP support runs +over HTTP. A native MCP transport using stdio or SSE would allow Axis2 +services to participate directly in MCP agent ecosystems.</li> +<li><strong>REST dispatch annotations</strong> -- JAX-RS-style annotations +(<code>@GET</code>, <code>@Path</code>, etc.) for Axis2 services would +reduce configuration and make REST endpoints more intuitive.</li> +<li><strong>Test coverage</strong> -- Unit and integration tests for the +new JSON-RPC and MCP message receivers.</li> </ul> + +<p>See the project modernization plan in the repository for the full +roadmap. Contributions are welcome at +<a href="https://github.com/apache/axis-axis2-java-core">github.com/apache/axis-axis2-java-core</a>.</p> + +<hr /> + +<!-- =============================================================== --> +<!-- CLASSIC SOAP ARCHITECTURE (preserved in full from original) --> +<!-- =============================================================== --> + +<a name="classic-architecture" id="classic-architecture"></a> +<h1 align="center">Classic SOAP Architecture Reference</h1> + +<p><em>The following sections contain the original Axis2 architecture +documentation written in 2004-2005. This content describes the SOAP-centric +processing model in detail and remains accurate for SOAP deployments. +Modern multi-protocol features are described in the sections above.</em></p> + <a name="bmBP" id="bmBP"></a> <h2>The Big Picture</h2> <p>A new architecture for Axis was introduced during the August @@ -607,7 +824,7 @@ server, and provides the following information:</p> <a name="servicearchive" id="servicearchive"></a> <h3>Service Archive</h3> <p>The Service archive must have a <em>META-INF/services.xml</em> file and may -contain the dependent classes. Please see modules/kernel/resources/services.xsd in +contain the dependent classes. Please see modules/kernel/resources/services.xsd in the source distribution for the schema for services.xml. The <em>services.xml</em> file has the following information.</p> <ol> diff --git a/src/site/xdoc/docs/json-rpc-mcp-guide.xml b/src/site/xdoc/docs/json-rpc-mcp-guide.xml index de0dc844ba..d2bd01529e 100644 --- a/src/site/xdoc/docs/json-rpc-mcp-guide.xml +++ b/src/site/xdoc/docs/json-rpc-mcp-guide.xml @@ -44,6 +44,13 @@ deployed services, accessible at <code>/openapi-mcp.json</code>, that tells MCP the exact JSON-RPC envelope format, auth requirements, and endpoint URL for every deployed operation — no out-of-band documentation required.</p> +<p><strong>Legacy SOAP services:</strong> MCP is a JSON-RPC 2.0 protocol — it does +not support SOAP. To expose a SOAP service to AI agents via MCP, first convert it +to JSON-RPC by switching message receivers in <code>services.xml</code> and setting +<code>axis2.mode=json</code> (see the +<a href="spring-boot-starter.html#soap_vs_json">Spring Boot Starter Guide</a>). +The service Java class does not change — only the wire format configuration.</p> + <!-- ============================================================ --> <h2>What is MCP?</h2>
