ws-commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From veit...@apache.org
Subject svn commit: r794080 - in /webservices/commons/trunk/modules/axiom/modules/axiom-api/src: main/java/org/apache/axiom/ext/stax/datahandler/ main/java/org/apache/axiom/om/impl/ main/java/org/apache/axiom/om/impl/builder/ main/java/org/apache/axiom/util/st...
Date Tue, 14 Jul 2009 21:47:26 GMT
Author: veithen
Date: Tue Jul 14 21:47:26 2009
New Revision: 794080

URL: http://svn.apache.org/viewvc?rev=794080&view=rev
Log:
Some improvements to the data handler extension API.

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerProvider.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerReader.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMStAXWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtil.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/MimePartProvider.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPDecodingStreamReader.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/OMTextTestBase.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/OMAttachmentAccessorMimePartProvider.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReaderTest.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerProvider.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerProvider.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerProvider.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerProvider.java
Tue Jul 14 21:47:26 2009
@@ -30,6 +30,20 @@
  */
 public interface DataHandlerProvider {
     /**
+     * Check whether the {@link DataHandler} has already been loaded. A return value of
+     * <code>true</code> means that a call to {@link #getDataHandler()} will
not block or will
+     * retrieve the {@link DataHandler} without overhead. Note the return value of this method
for a
+     * given instance of this class may change over time due to events other than a call
to
+     * {@link #getDataHandler()} on the same instance. E.g. a call to {@link #getDataHandler()}
on
+     * one instance may change the return value of the method on another instance (because
the
+     * {@link DataHandler} objects can only be loaded in a certain sequence).
+     * 
+     * @return <code>true</code> if the {@link DataHandler} has already been
loaded;
+     *         <code>false</code> otherwise
+     */
+    boolean isLoaded();
+    
+    /**
      * Get the {@link DataHandler} object for the binary content.
      * 
      * @return the binary content

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerReader.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerReader.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerReader.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/ext/stax/datahandler/DataHandlerReader.java
Tue Jul 14 21:47:26 2009
@@ -77,6 +77,17 @@
      *         available; <code>false</code> for all other types of events.
      */
     boolean isBinary();
+
+    /**
+     * Check if the binary content is eligible for optimization (e.g. using XOP) or if it
should
+     * be serialized as base64.
+     * Calling this method is only meaningful if {@link #isBinary()} returns <code>true</code>
for
+     * the current event. The behavior of this method is undefined if this is not the case.
+     * 
+     * @return <code>true</code> if the binary content is eligible for optimization;
+     *         <code>false</code> otherwise
+     */
+    boolean isOptimized();
     
     /**
      * Check whether the {@link javax.xml.stream.XMLStreamReader} supports deferred loading
of the

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMStAXWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMStAXWrapper.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMStAXWrapper.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMStAXWrapper.java
Tue Jul 14 21:47:26 2009
@@ -97,7 +97,10 @@
             }
         } else {
             if (xopEncoder == null) {
-                xopEncoder = new XOPEncodingStreamReader(switchingWrapper, contentIDGenerator);
+                // Since the intention is to support an efficient way to pass binary content
to a
+                // consumer that is not aware of our data handler extension (see WSCOMMONS-344),
we
+                // use optimizeAll=true, i.e. we ignore OMText#isOptimized().
+                xopEncoder = new XOPEncodingStreamReader(switchingWrapper, contentIDGenerator,
true);
                 setParent(xopEncoder);
             }
         }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/SwitchingWrapper.java
Tue Jul 14 21:47:26 2009
@@ -1204,6 +1204,22 @@
         }
     }
 
+    public boolean isOptimized() {
+        if (parser != null) {
+            if (dataHandlerReader != null) {
+                return dataHandlerReader.isOptimized();
+            } else {
+                throw new IllegalStateException();
+            }
+        } else {
+            if (lastNode instanceof OMText) {
+                return ((OMText)lastNode).isOptimized();
+            } else {
+                throw new IllegalStateException();
+            }
+        }
+    }
+
     public boolean isDeferred() {
         if (parser != null) {
             if (dataHandlerReader != null) {

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtil.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtil.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtil.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/DataHandlerReaderUtil.java
Tue Jul 14 21:47:26 2009
@@ -122,6 +122,11 @@
                     return ((Boolean)reader.getProperty(OMConstants.IS_BINARY)).booleanValue();
                 }
 
+                public boolean isOptimized() {
+                    // This is compatible with the old StAXBuilder implementation
+                    return true;
+                }
+
                 public boolean isDeferred() {
                     return false;
                 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/MimePartProvider.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/MimePartProvider.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/MimePartProvider.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/MimePartProvider.java
Tue Jul 14 21:47:26 2009
@@ -28,6 +28,17 @@
  */
 public interface MimePartProvider {
     /**
+     * Check whether the MIME part identified by a given content ID has already been loaded.
A
+     * return value of <code>true</code> means that a call to {@link #getMimePart(String)}
(for
+     * the same content ID) will not block or will retrieve the {@link DataHandler} without
+     * overhead.
+     * 
+     * @return <code>true</code> if the MIME part has already been loaded; <code>false</code>
+     *         otherwise
+     */
+    boolean isLoaded(String contentID);
+    
+    /**
      * Get the {@link DataHandler} for the MIME part identified by a given content ID.
      * 
      * @param contentID the content ID

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPDecodingStreamReader.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPDecodingStreamReader.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPDecodingStreamReader.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPDecodingStreamReader.java
Tue Jul 14 21:47:26 2009
@@ -73,6 +73,10 @@
             return contentID;
         }
 
+        public boolean isLoaded() {
+            return mimePartProvider.isLoaded(contentID);
+        }
+
         public DataHandler getDataHandler() throws XMLStreamException {
             return mimePartProvider.getMimePart(contentID);
         }
@@ -513,6 +517,11 @@
         return dh != null;
     }
 
+    public boolean isOptimized() {
+        // xop:Include implies optimized
+        return true;
+    }
+
     public boolean isDeferred() {
         return true;
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReader.java
Tue Jul 14 21:47:26 2009
@@ -109,6 +109,7 @@
     private final XMLStreamReader parent;
     private final ContentIDGenerator contentIDGenerator;
     private final DataHandlerReader dataHandlerReader;
+    private final boolean optimizeAll;
     private int state = STATE_PASS_THROUGH;
     private String currentContentID;
     private Map dataHandlerObjects = new LinkedHashMap();
@@ -122,12 +123,17 @@
      * @param contentIDGenerator
      *            used to generate content IDs for the binary content exposed as
      *            <tt>xop:Include</tt> element information items
+     * @param optimizeAll
+     *            if set to <code>true</code>, <tt>xop:Include</tt>
element information items
+     *            will be generated for all data handlers, regardless of the return value
of
+     *            {@link DataHandlerReader#isOptimized()}
      * 
      * @throws IllegalArgumentException
      *             if the provided {@link XMLStreamReader} doesn't implement the extension
defined
      *             by {@link DataHandlerReader}
      */
-    public XOPEncodingStreamReader(XMLStreamReader parent, ContentIDGenerator contentIDGenerator)
{
+    public XOPEncodingStreamReader(XMLStreamReader parent, ContentIDGenerator contentIDGenerator,
+            boolean optimizeAll) {
         this.parent = parent;
         this.contentIDGenerator = contentIDGenerator;
         DataHandlerReader dataHandlerReader;
@@ -140,6 +146,7 @@
             throw new IllegalArgumentException("The supplied XMLStreamReader doesn't implement
the DataHandlerReader extension");
         }
         this.dataHandlerReader = dataHandlerReader;
+        this.optimizeAll = optimizeAll;
     }
 
     /**
@@ -186,7 +193,8 @@
                 // Fall through
             default:
                 int event = parent.next();
-                if (event == CHARACTERS && dataHandlerReader.isBinary()) {
+                if (event == CHARACTERS && dataHandlerReader.isBinary()
+                        && (optimizeAll || dataHandlerReader.isOptimized())) {
                     String contentID = dataHandlerReader.getContentID();
                     contentID = contentIDGenerator.generateContentID(contentID);
                     Object dataHandlerObject = dataHandlerReader.isDeferred()

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/OMTextTestBase.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/OMTextTestBase.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/OMTextTestBase.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/OMTextTestBase.java
Tue Jul 14 21:47:26 2009
@@ -30,6 +30,10 @@
     static class TestDataHandlerProvider implements DataHandlerProvider {
         private DataHandler dh;
         
+        public boolean isLoaded() {
+            return false;
+        }
+
         public DataHandler getDataHandler() {
             if (dh == null) {
                 dh = new DataHandler("Data", "text/plain");

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/OMAttachmentAccessorMimePartProvider.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/OMAttachmentAccessorMimePartProvider.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/OMAttachmentAccessorMimePartProvider.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/OMAttachmentAccessorMimePartProvider.java
Tue Jul 14 21:47:26 2009
@@ -34,6 +34,11 @@
         this.attachments = attachments;
     }
 
+    public boolean isLoaded(String contentID) {
+        // TODO: probably we can only determine this for an Attachments object
+        return false;
+    }
+
     public DataHandler getMimePart(String contentID) throws XMLStreamException {
         DataHandler dh = attachments.getDataHandler(contentID);
         if (dh == null) {

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReaderTest.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReaderTest.java?rev=794080&r1=794079&r2=794080&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReaderTest.java
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/xop/XOPEncodingStreamReaderTest.java
Tue Jul 14 21:47:26 2009
@@ -48,7 +48,7 @@
                     TestConstants.MTOM_MESSAGE_CONTENT_TYPE);
             soapPartReader[i] = StAXUtils.createXMLStreamReader(attachments[i].getSOAPPartInputStream());
         }
-        XMLStreamReader actual = new XOPEncodingStreamReader(new XOPDecodingStreamReader(soapPartReader[1],
new OMAttachmentAccessorMimePartProvider(attachments[1])), contentIDGenerator);
+        XMLStreamReader actual = new XOPEncodingStreamReader(new XOPDecodingStreamReader(soapPartReader[1],
new OMAttachmentAccessorMimePartProvider(attachments[1])), contentIDGenerator, false);
         new XMLStreamReaderComparator(soapPartReader[0], actual).compare();
     }
 



Mime
View raw message