You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ws.apache.org by "Hudson (JIRA)" <ji...@apache.org> on 2016/02/13 21:19:18 UTC
[jira] [Commented] (AXIOM-330) Provide OMSourcedElement
Construction During StAXBuilder Processing
[ https://issues.apache.org/jira/browse/AXIOM-330?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15146175#comment-15146175 ]
Hudson commented on AXIOM-330:
------------------------------
FAILURE: Integrated in axiom-trunk #2522 (See [https://builds.apache.org/job/axiom-trunk/2522/])
Redesign the custom builder API introduced in AXIOM-330. (veithen: rev 1730260)
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderListener.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/CustomBuilderManager.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/CustomBuilderRegistration.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PayloadSelector.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/builder/SOAPPayloadSelector.java
* axiom/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/builder/StAXSOAPModelBuilder.java
* axiom/axiom-api/pom.xml
* axiom/axiom-api/src/main/java/org/apache/axiom/ext/stax/DelegatingXMLStreamReader.java
* axiom/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
* axiom/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/CustomBuilder.java
* axiom/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/CustomBuilderSupport.java
* axiom/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/CustomBuilder.java
* axiom/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/CustomBuilderSupport.java
* axiom/axiom-api/src/main/java/org/apache/axiom/util/stax/XMLStreamReaderUtils.java
* axiom/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
* axiom/src/site/markdown/release-notes/1.3.0.md
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/JAXBCustomBuilder.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/RegisterCustomBuilderForPayloadJAXBTestCase.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestRegisterCustomBuilderForPayloadJAXBPlain.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestRegisterCustomBuilderForPayloadJAXBWithDataHandlerReaderExtension.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestRegisterCustomBuilderForPayloadJAXBWithXOP.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/body/FirstElementNameWithParserTestCase.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestRegisterCustomBuilder.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestRegisterCustomBuilderForPayload.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestRegisterCustomBuilderForPayloadAfterSOAPFaultCheck.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap11/misc/TestElementPullStreamAndOMExpansion.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap11/misc/TestElementPullStreamAndOMExpansion2.java
* axiom/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap11/misc/TestElementPullStreamAndOMExpansion3.java
> Provide OMSourcedElement Construction During StAXBuilder Processing
> -------------------------------------------------------------------
>
> Key: AXIOM-330
> URL: https://issues.apache.org/jira/browse/AXIOM-330
> Project: Axiom
> Issue Type: Improvement
> Reporter: Rich Scheuerle
> Assignee: Rich Scheuerle
> Attachments: patch.txt
>
>
> Problem:
> ---------
> During outbound processing, an OMSourcedElement may be added to the Axiom tree to represent part of the message.
> An OMSourcedElement is efficient and performant.
> During inbound processing, we don't have a symmetrical capability. Instead of building an expensive
> sub-tree for a header or payload, it would be nice to represent the xml as an efficient OMSourcedElement.
> Usage Scenario 1:
> -----------------
> A message contains WS-A headers. These are expanded into Axiom sub-trees as the message is parsed.
> During Axis2 processing, this information is converted into EndpointReferenceTypes (POJOs).
> It would be more efficient to do this conversion when the message is parsed.
> This would eliminate a translation step, excess garbage collection, etc.
> Usage Scenario 2:
> -----------------
> A message contains a payload. The payload is expanded into an Axiom sub-tree as the message is parsed.
> (For example, assume that a handler added trace to read the whole message).
> During Axis2 processing, this information is converted into an ADB or JAXB object.
> It would be more efficient to do this conversion when the message is parsed.
> This would eliminate a translation step, excess garbage collection, etc.
> Solution:
> ---------
> Introduce a new interface to Axiom, CustomBuilder.
> A CustomBuilder has one method.
> /**
> * Create an OMElement for this whole subtree.
> * A null is returned if the default StAXBuilder behavior should be used.
> * @param namespace
> * @param localPart
> * @param parent
> * @param reader
> * @return null or OMElement
> */
> public OMElement create(String namespace,
> String localPart,
> OMContainer parent,
> XMLStreamReader reader,
> OMFactory factory)
> throws OMException;
> Introduce two methods on StAXBuilder.
> /**
> * Register a CustomBuilder for a payload.
> * The payload is defined as the elements inside a SOAPBody or the
> * document element of a REST message.
> * @param customBuilder
> * @return replaced CustomBuilder or null
> */
> public CustomBuilder registerCustomBuilderForPayload(CustomBuilder customBuilder);
> /**
> * Register a CustomBuilder associated with the indicated QName.
> * The CustomBuilder will be used when an element of that qname is encountered.
> * @param qName
> * @param maxDepth indicate the maximum depth that this qname will be found. (root = 0)
> * @param customBuilder
> * @return replaced CustomBuilder or null
> */
> public CustomBuilder registerCustomBuilder(QName qName, int maxDepth, CustomBuilder customBuilder);
> A consumer of Axiom (i.e. Axis2) can register a CustomBuilder on the StAXBuilder.
> For example, Axis2 could register a CustomBuilder for the WS-A headers (Scenario 1).
> For example, Axis2 JAX-WS could register a CustomBuilder for the JAXB payload (Scenario 2).
> Contribution
> ------------
> The patch contains the interface changes defined above, plus the implementation details.
> I have also provided a conventient CustomBuilder implementation, ByteArrayCustomBuilder.
> The ByteArrayCustomBuilder will build an OMSourcedElement backed by a byte[]. This is convenient
> for compressing large nested trees to a single byte[]. This CustomBuilder also is a useful pattern
> for building other CustomBuilder classes.
> I have also provided a validation test (CustomBuilderTest) that uses ByteArrayCustomBuilder.
> Caveats
> -------
> When a CustomBuilder is used, the CustomBuilder must ONLY provide an OMElement that represents the given
> sub-tree.
> The CustomBuilder is not permitted to alter information or do any work. This would be a violation.
> The expectation is that the CustomBuilder is an interface used by the direct consumers of Axiom (i.e. Axis2) for
> specific scenarios (i.e. JAX-WS JAXB)
> There is no intention to expose the CustomBuilder to users of Axis2.
> The lifecycle of a CustomBuilder is initially undefined. The thread-safety of a CustomBuilder is initially undefined.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
For additional commands, e-mail: dev-help@ws.apache.org