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