Author: scheu
Date: Tue Jul 15 05:21:17 2008
New Revision: 676898
URL: http://svn.apache.org/viewvc?rev=676898&view=rev
Log:
Quick Fix for an NPE
Added protection in the OMStAXWrapper.generateEvents method if the current node
is null.
Also added more logging to OMElementImpl and OMNodeImpl.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=676898&r1=676897&r2=676898&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
Tue Jul 15 05:21:17 2008
@@ -1110,8 +1110,24 @@
}
public OMElement cloneOMElement() {
+
+ if (log.isDebugEnabled()) {
+ log.debug("cloneOMElement start");
+ log.debug(" element string =" + this.toString());
+ log.debug(" isComplete = " + isComplete());
+ log.debug(" builder = " + builder);
+ }
+ // Make sure the source (this node) is completed
+ if (!isComplete()) {
+ this.build();
+ }
+
+ // Now get a parser for the full tree
+ XMLStreamReader xmlStreamReader = this.getXMLStreamReader(true);
+
+ // Build the (target) clonedElement from the parser
OMElement clonedElement =
- new
StAXOMBuilder(this.getXMLStreamReader(true)).getDocumentElement();
+ new StAXOMBuilder(xmlStreamReader).getDocumentElement();
clonedElement.build();
return clonedElement;
}
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java?rev=676898&r1=676897&r2=676898&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
Tue Jul 15 05:21:17 2008
@@ -323,8 +323,14 @@
* @throws OMException
*/
public void build() throws OMException {
+ if (builder != null && builder.isCompleted()) {
+ if (DEBUG_ENABLED) {
+ log.debug("Builder is already complete.");
+ }
+ }
while (!done) {
- builder.next();
+
+ builder.next();
if (builder.isCompleted() && !done) {
if (DEBUG_ENABLED) {
log.debug("Builder is complete. Setting OMNode to
complete.");
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java?rev=676898&r1=676897&r2=676898&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
Tue Jul 15 05:21:17 2008
@@ -1096,10 +1096,10 @@
nextNode = navigator.next();
} else {
if (!switchingAllowed) {
- if (navigator.isCompleted() || builder.isCompleted()) {
+ if (navigator.isCompleted() || builder == null ||
builder.isCompleted()) {
nextNode = null;
if (DEBUG_ENABLED) {
- if (builder.isCompleted()) {
+ if (builder == null || builder.isCompleted()) {
log.debug("Builder is complete. Next node is set
to null.");
}
}
@@ -1117,7 +1117,9 @@
} else {
// reset caching (the default is ON so it was not needed
in the
// earlier case!
- builder.setCache(false);
+ if (builder != null) {
+ builder.setCache(false);
+ }
state = SWITCH_AT_NEXT;
}
}
@@ -1265,6 +1267,13 @@
*/
private int generateEvents(OMNode node) {
int returnEvent = 0;
+ if (node == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Node is null...returning END_DOCUMENT");
+ }
+ returnEvent = END_DOCUMENT;
+ return returnEvent;
+ }
int nodeType = node.getType();
switch (nodeType) {
case OMNode.ELEMENT_NODE: