You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by aj...@apache.org on 2005/02/08 07:18:50 UTC
svn commit: r152642 - in
webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis:
impl/llom/OMStAXWrapper.java transport/AbstractTransportSender.java
Author: ajith
Date: Mon Feb 7 22:18:48 2005
New Revision: 152642
URL: http://svn.apache.org/viewcvs?view=rev&rev=152642
Log:
Changed the internal implementation of the OMStaxWrapper. Now the OMstax wrapper is a state machine
Modified:
webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMStAXWrapper.java
webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/AbstractTransportSender.java
Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMStAXWrapper.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMStAXWrapper.java?view=diff&r1=152641&r2=152642
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMStAXWrapper.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMStAXWrapper.java Mon Feb 7 22:18:48 2005
@@ -43,22 +43,26 @@
*/
public class OMStAXWrapper implements XMLStreamReader, XMLStreamConstants {
- private Log log = LogFactory.getLog(getClass());
+ private Log log = LogFactory.getLog(getClass());
private OMNavigator navigator;
private OMXMLParserWrapper builder;
private XMLStreamReader parser;
private OMNode rootNode;
private boolean isFirst = true;
- //the boolean flag that keeps the state of the document!
- private boolean complete = false;
-
- private int currentEvent = 0;
// navigable means the output should be taken from the navigator
// as soon as the navigator returns a null navigable will be reset
//to false and the subsequent events will be taken from the builder
//or the parser directly
- private boolean navigable = true;
+ private static final short NAVIGABLE = 0;
+ private static final short SWITCH_AT_NEXT = 1;
+ private static final short COMPLETED = 2;
+ private static final short SWITCHED = 3;
+
+ private short state;
+ private int currentEvent = 0;
+
+
// SwitchingAllowed is set to false by default
// this means that unless the user explicitly states
@@ -79,8 +83,6 @@
//needs this to refer to the last known node
private OMNode lastNode = null;
- private boolean switched = false;
-
public void setAllowSwitching(boolean b) {
this.switchingAllowed = b;
}
@@ -96,11 +98,11 @@
* the end of the given element. hence care should be taken to pass the
* root element if the entire document is needed
*/
- OMStAXWrapper(OMXMLParserWrapper builder, OMElement startNode) {
+ OMStAXWrapper(OMXMLParserWrapper builder, OMElement startNode) {
this(builder,startNode,false);
}
- OMStAXWrapper(OMXMLParserWrapper builder, OMElement startNode,boolean cacheOff) {
+ OMStAXWrapper(OMXMLParserWrapper builder, OMElement startNode,boolean cacheOff) {
//create a navigator
this.navigator = new OMNavigator(startNode);
this.builder = builder;
@@ -117,12 +119,12 @@
*/
public String getPrefix() {
String returnStr = null;
- if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT) {
- if (navigable) {
+ if (parser!=null){
+ returnStr = parser.getPrefix();
+ }else{
+ if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT) {
OMNamespace ns = ((OMElement) lastNode).getNamespace();
returnStr = ns == null ? null : ns.getPrefix();
- } else {
- returnStr = parser.getPrefix();
}
}
return returnStr;
@@ -133,15 +135,14 @@
*/
public String getNamespaceURI() {
String returnStr = null;
- if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT || currentEvent == NAMESPACE) {
- if (navigable) {
+ if (parser!=null){
+ returnStr = parser.getNamespaceURI();
+ }else{
+ if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT || currentEvent == NAMESPACE) {
OMNamespace ns = ((OMElement) lastNode).getNamespace();
returnStr = ns == null ? null : ns.getName();
- } else {
- returnStr = parser.getNamespaceURI();
}
}
-
return returnStr;
}
@@ -149,10 +150,10 @@
* @see javax.xml.stream.XMLStreamReader#hasName()
*/
public boolean hasName() {
- if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT) {
- return true;
- } else {
- return false;
+ if (parser!= null){
+ return parser.hasName();
+ }else{
+ return (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT);
}
}
@@ -161,14 +162,14 @@
*/
public String getLocalName() {
String returnStr = null;
- if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT || currentEvent == ENTITY_REFERENCE) {
- if (navigable) {
+ if (parser!=null){
+ returnStr = parser.getLocalName();
+ }else{
+ if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT || currentEvent == ENTITY_REFERENCE) {
returnStr = ((OMElement) lastNode).getLocalName();
- } else {
- //System.out.println(parser.getEventType());
- returnStr = parser.getLocalName();
}
}
+
return returnStr;
}
@@ -177,13 +178,14 @@
*/
public QName getName() {
QName returnName = null;
- if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT) {
- if (navigable) {
+ if (parser!=null){
+ returnName = parser.getName();
+ } else{
+ if (currentEvent == START_ELEMENT || currentEvent == END_ELEMENT) {
returnName = getQName((OMNamedNode) lastNode);
- } else {
- returnName = parser.getName();
}
}
+
return returnName;
}
@@ -204,15 +206,13 @@
*/
public int getTextLength() {
int returnLength = 0;
- if (hasText()) {
- if (navigable) {
- OMText textNode = (OMText) lastNode;
- returnLength = textNode.getValue().length();
- } else {
- returnLength = parser.getTextLength();
- }
-
+ if (parser!=null){
+ returnLength = parser.getTextLength();
+ } else{
+ OMText textNode = (OMText) lastNode;
+ returnLength = textNode.getValue().length();
}
+
return returnLength;
}
@@ -221,12 +221,11 @@
*/
public int getTextStart() {
int returnLength = 0;
- if (hasText()) {
- if (!navigable) {
- returnLength = parser.getTextStart();
- }
- //Note - this has no relevant method in the OM
+ if (parser !=null) {
+ returnLength = parser.getTextStart();
}
+ //Note - this has no relevant method in the OM
+
return returnLength;
}
@@ -237,7 +236,7 @@
public int getTextCharacters(int i, char[] chars, int i1, int i2) throws XMLStreamException {
int returnLength = 0;
if (hasText()) {
- if (!navigable) {
+ if (parser!=null) {
try {
returnLength = parser.getTextCharacters(i, chars, i1, i2);
} catch (XMLStreamException e) {
@@ -254,16 +253,17 @@
*/
public char[] getTextCharacters() {
char[] returnArray = null;
- if (hasText()) {
- if (navigable) {
+
+ if (parser!=null) {
+ returnArray = parser.getTextCharacters();
+ } else {
+ if (hasText()) {
OMText textNode = (OMText) lastNode;
String str = textNode.getValue();
returnArray = str.toCharArray();
- } else {
- returnArray = parser.getTextCharacters();
}
-
}
+
return returnArray;
}
@@ -272,12 +272,14 @@
*/
public String getText() {
String returnString = null;
- if (hasText()) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getText();
+ } else {
+ if (hasText()) {
+
OMText textNode = (OMText) lastNode;
returnString = textNode.getValue();
- } else {
- returnString = parser.getText();
+
}
}
return returnString;
@@ -297,14 +299,15 @@
*/
public String getNamespaceURI(int i) {
String returnString = null;
- if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getNamespaceURI(i);
+ }else{
+ if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
OMNamespace ns = (OMNamespace)getItemFromIterator(((OMElement)lastNode).getAllDeclaredNamespaces(),i);
returnString = ns==null?null:ns.getName();
- } else {
- returnString = parser.getNamespaceURI(i);
}
}
+
return returnString;
}
@@ -313,12 +316,12 @@
*/
public String getNamespacePrefix(int i) {
String returnString = null;
- if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
- if (navigable) {
+ if (parser !=null){
+ returnString = parser.getNamespacePrefix(i);
+ } else {
+ if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
OMNamespace ns = (OMNamespace)getItemFromIterator(((OMElement)lastNode).getAllDeclaredNamespaces(),i);
returnString = ns==null?null:ns.getPrefix();
- } else {
- returnString = parser.getNamespacePrefix(i);
}
}
return returnString;
@@ -329,13 +332,15 @@
*/
public int getNamespaceCount() {
int returnCount = 0;
- if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
- if (navigable) {
- returnCount = getCount(((OMElement)lastNode).getAllDeclaredNamespaces());
- } else {
- returnCount = parser.getNamespaceCount();
+ if (parser!=null){
+ returnCount = parser.getNamespaceCount();
+ } else{
+ if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
+ returnCount = getCount(((OMElement)lastNode).getAllDeclaredNamespaces());
}
}
+
+
return returnCount;
}
@@ -344,14 +349,14 @@
*/
public boolean isAttributeSpecified(int i) {
boolean returnValue = false;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnValue = parser.isAttributeSpecified(i);
+ }else {
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
//theres nothing to be returned here
} else {
- returnValue = parser.isAttributeSpecified(i);
+ throw new IllegalStateException("attribute type accessed in illegal event!");
}
- } else {
- throw new IllegalStateException("attribute type accessed in illegal event!");
}
return returnValue;
}
@@ -361,18 +366,20 @@
*/
public String getAttributeValue(int i) {
String returnString = null;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getAttributeValue(i);
+ }else{
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
+
OMAttribute attrib = getAttribute((OMElement) lastNode, i);
if (attrib != null) {
returnString = attrib.getValue();
}
- } else {
- returnString = parser.getAttributeValue(i);
+ }else{
+ throw new IllegalStateException("attribute type accessed in illegal event!");
}
- } else {
- throw new IllegalStateException("attribute type accessed in illegal event!");
}
+
return returnString;
}
@@ -382,15 +389,16 @@
*/
public String getAttributeType(int i) {
String returnString = null;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getAttributeType(i);
+ } else {
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
//todo implement this
- } else {
- returnString = parser.getAttributeType(i);
- }
} else {
throw new IllegalStateException("attribute type accessed in illegal event!");
}
+ }
+
return returnString;
}
@@ -399,8 +407,11 @@
*/
public String getAttributePrefix(int i) {
String returnString = null;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getAttributePrefix(i);
+ }else{
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
+
OMAttribute attrib = getAttribute((OMElement) lastNode, i);
if (attrib != null) {
OMNamespace nameSpace = attrib.getNamespace();
@@ -408,12 +419,12 @@
returnString = nameSpace.getPrefix();
}
}
- } else {
- returnString = parser.getAttributePrefix(i);
- }
+
} else {
throw new IllegalStateException("attribute prefix accessed in illegal event!");
}
+ }
+
return returnString;
}
@@ -422,18 +433,21 @@
*/
public String getAttributeLocalName(int i) {
String returnString = null;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getAttributeLocalName(i);
+ }else{
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
+
OMAttribute attrib = getAttribute((OMElement) lastNode, i);
if (attrib != null)
returnString = attrib.getLocalName();
- } else {
- returnString = parser.getAttributeLocalName(i);
- }
+
} else {
throw new IllegalStateException("attribute localName accessed in illegal event!");
}
+ }
+
return returnString;
}
@@ -442,8 +456,11 @@
*/
public String getAttributeNamespace(int i) {
String returnString = null;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getAttributeNamespace(i);
+ }else{
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
+
OMAttribute attrib = getAttribute((OMElement) lastNode, i);
if (attrib != null) {
OMNamespace nameSpace = attrib.getNamespace();
@@ -451,12 +468,12 @@
returnString = nameSpace.getName();
}
}
- } else {
- returnString = parser.getAttributeNamespace(i);
- }
+
} else {
throw new IllegalStateException("attribute nameSpace accessed in illegal event!");
}
+ }
+
return returnString;
}
@@ -465,15 +482,18 @@
*/
public QName getAttributeName(int i) {
QName returnQName = null;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnQName = parser.getAttributeName(i);
+ }else{
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
+
returnQName = getAttribute((OMElement) lastNode, i).getQName();
- } else {
- returnQName = parser.getAttributeName(i);
- }
+
} else {
throw new IllegalStateException("attribute count accessed in illegal event!");
}
+ }
+
return returnQName;
}
@@ -483,17 +503,20 @@
*/
public int getAttributeCount() {
int returnCount = 0;
- if (isStartElement() || currentEvent == ATTRIBUTE) {
- if (navigable) {
+ if (parser!=null){
+ returnCount = parser.getAttributeCount();
+ }else{
+ if (isStartElement() || currentEvent == ATTRIBUTE) {
+
OMElement elt = (OMElement) lastNode;
returnCount = getCount(elt.getAttributes());
- } else {
- returnCount = parser.getAttributeCount();
- }
+
} else {
throw new IllegalStateException("attribute count accessed in illegal event!");
}
+ }
+
return returnCount;
}
@@ -506,10 +529,10 @@
public boolean isWhiteSpace() {
boolean b;
- if (navigable) {
- b = (currentEvent == SPACE);
- } else {
- b = parser.isWhiteSpace();
+ if (parser!=null){
+ b = parser.isWhiteSpace();
+ }else{
+ b = (currentEvent == SPACE);
}
return b;
@@ -517,21 +540,22 @@
public boolean isCharacters() {
boolean b;
- if (navigable) {
- b = (currentEvent == CHARACTERS);
- } else {
- b = parser.isCharacters();
+ if (parser!=null){
+ b = parser.isCharacters();
+ }else{
+ b = (currentEvent == CHARACTERS);
}
return b;
}
public boolean isEndElement() {
boolean b;
- if (navigable) {
- b = (currentEvent == END_ELEMENT);
- } else {
+ if (parser!=null){
b = parser.isEndElement();
+ }else{
+ b = (currentEvent == END_ELEMENT);
}
+
return b;
}
@@ -548,29 +572,33 @@
public boolean isStartElement() {
boolean b;
- if (navigable) {
- b = (currentEvent == START_ELEMENT);
- } else {
- b = parser.isStartElement();
+ if (parser!=null){
+ b = parser.isStartElement();
+ }else{
+ b = (currentEvent == START_ELEMENT);
}
+
return b;
}
public String getNamespaceURI(String s) {
String returnString = null;
- if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
- if (navigable) {
+ if (parser!=null){
+ returnString = parser.getNamespaceURI(s);
+ }else{
+ if (isStartElement() || isEndElement() || currentEvent == NAMESPACE) {
+
//Nothing to do here! How to get the namespacace references
- } else {
- returnString = parser.getNamespaceURI(s);
- }
+
}
+ }
+
return returnString;
}
public void close() throws XMLStreamException {
//this doesnot mean anything with respect to the OM
- if (!navigable) {
+ if (parser!=null) {
parser.close();
}
@@ -578,7 +606,7 @@
}
public boolean hasNext() throws XMLStreamException {
- return !complete;
+ return !(state==COMPLETED);
}
/**
@@ -598,42 +626,52 @@
public String getElementText() throws XMLStreamException {
String returnText = "";
-
- if (navigable) {
- if (currentNode.getType() == OMNode.ELEMENT_NODE) {
- //todo complete this
- return null;
- }
- } else {
+ if (parser!=null){
try {
returnText = parser.getElementText();
} catch (XMLStreamException e) {
throw new OMStreamingException(e);
}
+ }else{
+ if (currentNode.getType() == OMNode.ELEMENT_NODE) {
+ //todo complete this
+ return null;
+ }
}
+
return returnText;
}
public int next() throws XMLStreamException {
-
- if (complete) {
- throw new OMStreamingException("Parser completed!");
+ switch(state){
+ case COMPLETED:
+ throw new OMStreamingException("Parser completed!");
+ case SWITCH_AT_NEXT:
+ state = SWITCHED;
+ //load the parser
+ try {
+ parser = (XMLStreamReader) builder.getParser();
+ } catch (ClassCastException e) {
+ throw new UnsupportedOperationException("incompatible parser found!");
+ }
+ log.info("Switching to the Real Stax parser to generated the future events");
+ currentEvent = parser.next();
+ updateCompleteStatus();
+ break;
+ case NAVIGABLE:
+ currentEvent = generateEvents(currentNode);
+ updateCompleteStatus();
+ updateLastNode();
+ break;
+ case SWITCHED:
+ currentEvent = parser.next();
+ updateCompleteStatus();
+ break;
+ default:
+ throw new OMStreamingException("unsuppported state!");
}
- if (switched && navigable){
- //set navigable to false.Now the subsequent requests will be directed to
- //the parser
- navigable = false;
- log.info("Switching to the Real Stax parser to generated the future events");
- }
- if (navigable) {
- currentEvent = generateEvents(currentNode);
- updateCompleteStatus();
- updateLastNode();
- } else {
- currentEvent = builder.next();
- updateCompleteStatus();
- }
+
return currentEvent;
}
@@ -661,6 +699,7 @@
}
private void updateNextNode() {
+
if (navigator.isNavigable()) {
nextNode = navigator.next();
} else {
@@ -676,32 +715,22 @@
//reset caching (the default is ON so it was not needed in the
//earlier case!
builder.setCache(false);
- //load the parser
- try {
- parser = (XMLStreamReader) builder.getParser();
- } catch (ClassCastException e) {
- throw new UnsupportedOperationException("incompatible parser found!");
- }
-
- switched = true;
-
-
-
+ state = SWITCH_AT_NEXT;
}
}
}
private void updateCompleteStatus() {
-
- if (!navigable) {
- complete = (currentEvent == END_DOCUMENT);
- } else {
- if (rootNode.equals(currentNode))
+ if (state==NAVIGABLE){
+ if (rootNode == currentNode)
if (isFirst)
isFirst = false;
else
- complete = true;
+ state = COMPLETED;
+ } else{
+ state = (currentEvent == END_DOCUMENT)?COMPLETED:state;
}
+
}
@@ -755,8 +784,8 @@
int nodeType = node.getType();
switch (nodeType) {
case OMNode.ELEMENT_NODE:
- OMElement element = (OMElement) node;
- log.info("Generating events from element {" + element.getNamespaceName()+ "}" + element.getLocalName() + " Generated OM tree");
+ OMElement element = (OMElement) node;
+ log.info("Generating events from element {" + element.getNamespaceName()+ "}" + element.getLocalName() + " Generated OM tree");
returnEvent = generateElementEvents(element);
break;
case OMNode.TEXT_NODE:
Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/AbstractTransportSender.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/AbstractTransportSender.java?view=diff&r1=152641&r2=152642
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/AbstractTransportSender.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/AbstractTransportSender.java Mon Feb 7 22:18:48 2005
@@ -72,7 +72,7 @@
// org.TimeRecorder.BEFORE_SERIALIZE = System.currentTimeMillis();
outputWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(out);
// envelope.serialize(outputWriter,false);
- envelope.serialize(outputWriter,false);
+ envelope.serialize(outputWriter,false);
outputWriter.flush();
// org.TimeRecorder.AFTER_SERIALIZE = System.currentTimeMillis();