This is an automated email from the ASF dual-hosted git repository.
veithen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ws-axiom.git
The following commit(s) were added to refs/heads/master by this push:
new 598d1741a Move interface hierarchy fix to Axiom 3.0
598d1741a is described below
commit 598d1741a633d513dbea0d74e4abb8610736114f
Author: Andreas Veithen-Knowles <[email protected]>
AuthorDate: Sat Feb 21 10:48:23 2026 +0000
Move interface hierarchy fix to Axiom 3.0
Moving methods from OMContainer to OMElement breaks binary compatibility
even for code that doesn't call them on OMDocument, so defer to 3.0.
---
docs/roadmap.md | 70 ++++++++++++++++++++++++++++++---------------------------
1 file changed, 37 insertions(+), 33 deletions(-)
diff --git a/docs/roadmap.md b/docs/roadmap.md
index bb026a003..11c7e00e2 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -17,10 +17,12 @@
~ under the License.
-->
-Axiom 1.3 roadmap
-=================
+Roadmap
+=======
-## Introduction
+## Axiom 1.3
+
+### Introduction
This page summarizes the planned changes for the next major release, i.e.
Axiom 1.3.
Note that it is not intended as a wish list for new features, but identifies a
set of
@@ -38,19 +40,9 @@ The overall goals for the 1.3 are:
* Make the API more compact by clarifying the separation between the public
API
and implementation classes and moving implementation classes out of
`axiom-api`.
-## API inconsistencies to be eliminated
-
-### Methods declared by the wrong interface in the node type hierarchy
-
-Some methods are declared at the wrong level in the node type hierarchy so
that they may
-be called on nodes for which they are not meaningful:
-
-* `OMContainer` declares several methods that return child elements by name:
`getChildrenWithLocalName`,
- `getChildrenWithName`, `getChildrenWithNamespaceURI` and
`getFirstChildWithName`.
- Since the document element is unique, these methods are not meaningful for
`OMDocument`
- and they should be declared by `OMElement` instead.
+### API inconsistencies to be eliminated
-### Exception hierarchy
+#### Exception hierarchy
The way exceptions are used in Axiom 1.2.x is not very consistent. In addition
it doesn't allow application
code to distinguish between different types of error cases. This should be
improved in
@@ -74,12 +66,12 @@ Axiom 1.3 to meet the following requirements:
packages (and their subpackages). However, in Axiom 1.2.x that exception
is used by the MIME/attachments API
as well.
-## Removal of unnecessary or irrelevant APIs
+### Removal of unnecessary or irrelevant APIs
This section identifies APIs that have become unnecessary or irrelevant. Note
that APIs that
have already been deprecated in 1.2.x (and will be removed in 1.3 anyway) are
not listed here.
-### `org.apache.axiom.om.impl.builder.XOPBuilder`
+#### `org.apache.axiom.om.impl.builder.XOPBuilder`
The `XOPBuilder` interface is implemented by `XOPAwareStAXOMBuilder` and
`MTOMStAXSOAPModelBuilder`.
With the changes in r1164997 and r1207662, it is no longer used internally by
Axiom.
@@ -98,7 +90,7 @@ used to create the builder. That is undesirable for two
reasons:
Therefore the `XOPBuilder` API will be removed in Axiom 1.3.
-## Classes to be moved from `axiom-api` to `om-aspects`
+### Classes to be moved from `axiom-api` to `om-aspects`
Up to version 1.2.12, the core Axiom code was organized in three modules,
namely `axiom-api`, `axiom-impl` and `axiom-dom`, where `axiom-api`
@@ -130,7 +122,7 @@ because it has multiple benefits:
This section identifies the classes and internal APIs that will be removed
from `axiom-api`.
-### Builder implementations
+#### Builder implementations
In Axiom 1.2.13, the `OMXMLBuilderFactory` API allows to create any type of
object model builder (plain XML, SOAP, XOP and MTOM). The API also defines two
@@ -158,7 +150,7 @@ be moved to `om-aspects`:
* TODO
-## Public APIs that need to be moved to another package
+### Public APIs that need to be moved to another package
Some interfaces are part of the public API although they are placed in an
`impl` package. These interfaces need to be moved to another package to make it
@@ -166,9 +158,9 @@ clear that they are not internal or implementation specific
interfaces:
* `org.apache.axiom.om.impl.builder.CustomBuilder`
-## APIs that need to be overhauled
+### APIs that need to be overhauled
-### `MTOMXMLStreamReader`
+#### `MTOMXMLStreamReader`
This should become an interface:
@@ -177,7 +169,7 @@ This should become an interface:
* This would allow us to move the implementation code out of `axiom-api`.
-### Attachment lifecycle manager
+#### Attachment lifecycle manager
The `LifecycleManager` API has a couple of issues that can't be fixed without
breaking
backward compatibility:
@@ -188,7 +180,7 @@ backward compatibility:
* `LifecycleManager` is an abstract API (interface), but refers to
`FileAccessor` which
is placed in an `impl` package.
-### `SOAPVersion`
+#### `SOAPVersion`
`SOAPVersion` should be changed from an interface to an abstract class so that
one can
define static methods to get the SOAP version by envelope namespace or media
type. Alternatively,
@@ -197,38 +189,38 @@ upgrade to Java 8 (which allows static methods in
interfaces).
`SOAP11Version` and `SOAP12Version` should not be public, and the deprecated
`getSingleton`
methods should be removed.
-### `StAXParserConfiguration`
+#### `StAXParserConfiguration`
The `StAXParserConfiguration` API relies on the assumption that the XML parser
used by Axiom is
an implementation of StAX. However, as noted above, this is not a strict
requirement; an Axiom
implementation could equally well use another API or provide its own XML
parser.
Therefore `StAXParserConfiguration` should be replaced by something more
generic.
-### `OMMetaFactory`
+#### `OMMetaFactory`
The argument order is not consistent across methods. See e.g. the two
`createOMBuilder` methods that
take an `InputSource` argument.
-### `OMElement`
+#### `OMElement`
The argument order of the `addAttribute(String, String, OMNamespace)` method
is inconsistent with that
of the `createOMAttribute` method in `OMFactory`.
-### `OMOutputFormat`
+#### `OMOutputFormat`
This class should be made immutable (which would require introducing a builder
class) so that instances
are safe to reuse.
-### `SOAPHeaderBlock`
+#### `SOAPHeaderBlock`
`SOAPHeaderBlock` has a feature that allows to use properties on the
`OMDataSource` to specify
the role, relay and mustUnderstand attributes. That shouldn't be necessary;
instead `OMSourcedElement`
should allow setting attributes without expanding the `OMDataSource`. The
`setProperty` method
can then be removed from `OMDataSource`.
-## Miscellaneous
+### Miscellaneous
-### Make non coalescing mode the default
+#### Make non coalescing mode the default
By default, Axiom configures the underlying parser in coalescing mode. The
reason is purely historical.
Axiom originally used Woodstox 3.x and that version implemented one aspect of
the StAX
@@ -243,7 +235,7 @@ A new major release would be the right moment to change
this and make non coales
This enables a couple of optimizations (e.g. when reading and decoding base64
from a text node) and
ensures that an XML document can be streamed with constant memory, even if it
contains large text nodes.
-### Don't allow `addChild` to reorder children
+#### Don't allow `addChild` to reorder children
The `SOAPEnvelope` implementations in LLOM and DOOM override the `addChild`
method to
reorder the nodes if an attempt is made to add a `SOAPHeader` after the
`SOAPBody`.
@@ -252,4 +244,16 @@ design perspective because it breaks the general contract
of the `addChild` meth
to add the node as the last child.
The `addChild` implementation for `SOAPEnvelope` should not do this. Instead
it should
-just throw an exception if a `SOAPHeader` is added at the wrong position.
\ No newline at end of file
+just throw an exception if a `SOAPHeader` is added at the wrong position.
+
+## Axiom 3.0
+
+### Methods declared by the wrong interface in the node type hierarchy
+
+Some methods are declared at the wrong level in the node type hierarchy so
that they may
+be called on nodes for which they are not meaningful:
+
+* `OMContainer` declares several methods that return child elements by name:
`getChildrenWithLocalName`,
+ `getChildrenWithName`, `getChildrenWithNamespaceURI` and
`getFirstChildWithName`.
+ Since the document element is unique, these methods are not meaningful for
`OMDocument`
+ and they should be declared by `OMElement` instead.
\ No newline at end of file