You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by sc...@apache.org on 2007/07/16 20:45:29 UTC

svn commit: r556692 - in /webservices/commons/trunk/modules/axiom/modules: axiom-api/src/main/java/org/apache/axiom/om/impl/builder/ axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/

Author: scheu
Date: Mon Jul 16 11:45:29 2007
New Revision: 556692

URL: http://svn.apache.org/viewvc?view=rev&rev=556692
Log:
WSCOMMONS-219
Contributor:Rich Scheuerle
The getCharacterEncodingScheme()/getEncoding() methods are only allowed on the
START_DOCUMENT event.  
Minor additions are made to the builders/OMSourcedElement to accomodate the situation 
where the parser is already passed the START_DOCUMENT event.

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
    webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?view=diff&rev=556692&r1=556691&r2=556692
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java Mon Jul 16 11:45:29 2007
@@ -75,8 +75,11 @@
     protected OMDocument document;
 
     protected String charEncoding = null;
+    
+    
     /**
      * Constructor StAXBuilder.
+     * This constructor is used if the parser is at the beginning (START_DOCUMENT).
      *
      * @param ombuilderFactory
      * @param parser
@@ -84,10 +87,33 @@
     protected StAXBuilder(OMFactory ombuilderFactory, XMLStreamReader parser) {
         this.parser = parser;
         omfactory = ombuilderFactory;
+        
+        // The getCharacterEncodingScheme and getEncoding information are 
+        // only available at the START_DOCUMENT event.
         charEncoding = parser.getCharacterEncodingScheme();
         if(charEncoding == null){
             charEncoding = parser.getEncoding();
         }
+
+        if (parser instanceof BuilderAwareReader) {
+            ((BuilderAwareReader) parser).setBuilder(this);
+        }
+    }
+    
+    /**
+     * Constructor StAXBuilder.
+     * This constructor is used if the parser is not at the START_DOCUMENT.
+     *
+     * @param ombuilderFactory
+     * @param parser
+     * @param characterEncoding
+     */
+    protected StAXBuilder(OMFactory ombuilderFactory, 
+                          XMLStreamReader parser, 
+                          String characterEncoding) {
+        this.parser = parser;
+        omfactory = ombuilderFactory;
+        charEncoding = characterEncoding;
 
         if (parser instanceof BuilderAwareReader) {
             ((BuilderAwareReader) parser).setBuilder(this);

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java?view=diff&rev=556692&r1=556691&r2=556692
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java Mon Jul 16 11:45:29 2007
@@ -73,12 +73,32 @@
      * @param factory
      * @param parser
      * @param element
+     * @param characterEncoding of existing element
      */
-    public StAXOMBuilder(OMFactory factory, XMLStreamReader parser, OMElement element) {
-        this(factory, parser);
+    public StAXOMBuilder(OMFactory factory, 
+                         XMLStreamReader parser, 
+                         OMElement element, 
+                         String characterEncoding) {
+        // Use this constructor because the parser is passed the START_DOCUMENT state.
+        super(factory, parser, characterEncoding);  
+        document = factory.createOMDocument(this);
+        if (charEncoding != null) {
+            document.setCharsetEncoding(charEncoding);
+        }
         lastNode = element;
         document.setOMDocumentElement(element);
         populateOMElement(element);
+    }
+    
+    /**
+     * Constructor linked to existing element.
+     *
+     * @param factory
+     * @param parser
+     * @param element
+     */
+    public StAXOMBuilder(OMFactory factory, XMLStreamReader parser, OMElement element) {
+        this(factory, parser, element, null);
     }
 
     /**

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java?view=diff&rev=556692&r1=556691&r2=556692
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java Mon Jul 16 11:45:29 2007
@@ -28,6 +28,7 @@
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.axiom.om.impl.OMNamespaceImpl;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.util.StAXUtils;
 import org.apache.commons.logging.Log;
@@ -147,8 +148,15 @@
                         getPrintableName());
             }
 
-            // position reader to start tag
+            // Get the XMLStreamReader
             readerFromDS = getDirectReader();
+            
+            // Advance past the START_DOCUMENT to the start tag.
+            // Remember the character encoding.
+            String characterEncoding = readerFromDS.getCharacterEncodingScheme();
+            if (characterEncoding != null) {
+                characterEncoding = readerFromDS.getEncoding();
+            }
             try {
                 if (readerFromDS.getEventType() != XMLStreamConstants.START_ELEMENT) {
                     while (readerFromDS.next() != XMLStreamConstants.START_ELEMENT) ;
@@ -160,7 +168,7 @@
                         e.getMessage());
             }
 
-            // make sure element local name and namespace matches what was expected
+            // Make sure element local name and namespace matches what was expected
             if (!readerFromDS.getLocalName().equals(getLocalName())) {
                 log.error("forceExpand: expected element name " +
                         getLocalName() + ", found " + readerFromDS.getLocalName());
@@ -181,15 +189,17 @@
             String readerPrefix = readerFromDS.getPrefix();
             readerPrefix = (readerPrefix == null) ? "" : readerPrefix;
             String prefix = getNamespace().getPrefix();
-
-            // set the builder for this element
+            
+            // Set the builder for this element
             isParserSet = true;
-            super.setBuilder(new StAXOMBuilder(getOMFactory(), readerFromDS, this));
+            super.setBuilder(new StAXOMBuilder(getOMFactory(), 
+                                               readerFromDS, 
+                                               this, 
+                                               characterEncoding));
             setComplete(false);
 
             // Update the prefix if necessary.  This must be done after
             // isParserSet to avoid a recursive call
-
             if (!readerPrefix.equals(prefix) ||
                     getNamespace() == null) {
                 if (log.isDebugEnabled()) {
@@ -316,7 +326,8 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.axiom.om.OMElement#addAttribute(java.lang.String, java.lang.String, org.apache.axiom.om.OMNamespace)
+     * @see org.apache.axiom.om.OMElement#addAttribute(java.lang.String, 
+     * java.lang.String, org.apache.axiom.om.OMNamespace)
      */
     public OMAttribute addAttribute(String attributeName, String value, OMNamespace namespace) {
         forceExpand();
@@ -459,7 +470,8 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.axiom.om.OMElement#setNamespaceWithNoFindInCurrentScope(org.apache.axiom.om.OMNamespace)
+     * @see org.apache.axiom.om.OMElement#
+     * setNamespaceWithNoFindInCurrentScope(org.apache.axiom.om.OMNamespace)
      */
     public void setNamespaceWithNoFindInCurrentScope(OMNamespace namespace) {
         forceExpand();
@@ -559,7 +571,8 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.axiom.om.impl.llom.OMElementImpl#internalSerialize(javax.xml.stream.XMLStreamWriter, boolean)
+     * @see org.apache.axiom.om.impl.llom.OMElementImpl#
+     * internalSerialize(javax.xml.stream.XMLStreamWriter, boolean)
      */
     protected void internalSerialize(XMLStreamWriter writer, boolean cache)
             throws XMLStreamException {
@@ -616,7 +629,8 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.axiom.om.OMNode#serialize(java.io.OutputStream, org.apache.axiom.om.OMOutputFormat)
+     * @see org.apache.axiom.om.OMNode#
+     * serialize(java.io.OutputStream, org.apache.axiom.om.OMOutputFormat)
      */
     public void serialize(OutputStream output, OMOutputFormat format) throws XMLStreamException {
         forceExpand();
@@ -624,7 +638,8 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.axiom.om.OMNode#serialize(java.io.Writer, org.apache.axiom.om.OMOutputFormat)
+     * @see org.apache.axiom.om.OMNode#
+     * serialize(java.io.Writer, org.apache.axiom.om.OMOutputFormat)
      */
     public void serialize(Writer writer, OMOutputFormat format) throws XMLStreamException {
         forceExpand();
@@ -668,7 +683,8 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.axiom.om.OMNode#serializeAndConsume(java.io.OutputStream, org.apache.axiom.om.OMOutputFormat)
+     * @see org.apache.axiom.om.OMNode#
+     * serializeAndConsume(java.io.OutputStream, org.apache.axiom.om.OMOutputFormat)
      */
     public void serializeAndConsume(OutputStream output, OMOutputFormat format)
             throws XMLStreamException {
@@ -684,7 +700,8 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.axiom.om.OMNode#serializeAndConsume(java.io.Writer, org.apache.axiom.om.OMOutputFormat)
+     * @see org.apache.axiom.om.OMNode#
+     * serializeAndConsume(java.io.Writer, org.apache.axiom.om.OMOutputFormat)
      */
     public void serializeAndConsume(Writer writer, OMOutputFormat format)
             throws XMLStreamException {
@@ -827,12 +844,12 @@
 
     OMNamespace handleNamespace(String namespaceURI, String prefix) {
         return super.handleNamespace(namespaceURI,
-                                     prefix);    //To change body of overridden methods use File | Settings | File Templates.
+                                     prefix);  
     }
 
     /**
-     * Provide access to the data source encapsulated in OMSourcedEle. This is usesfull when we want to
-     * access the raw data in the data source.
+     * Provide access to the data source encapsulated in OMSourcedEle. 
+     * This is usesful when we want to access the raw data in the data source.
      *
      * @return the internal datasource
      */



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org