1 16 package org.apache.axis2.om.impl.llom.builder; 17 18 import org.apache.axis2.om.*; 19 import org.apache.axis2.om.impl.llom.OMDocument; 20 import org.apache.axis2.soap.SOAPEnvelope; 21 22 import javax.xml.stream.XMLStreamConstants; 23 import javax.xml.stream.XMLStreamReader; 24 25 29 public class StAXOMBuilder extends StAXBuilder{ 30 33 protected OMDocument document; 34 35 41 public StAXOMBuilder(OMFactory ombuilderFactory, XMLStreamReader parser) { 42 super(ombuilderFactory, parser); 43 document = new OMDocument(this); 44 omfactory = OMAbstractFactory.getOMFactory(); 45 } 46 47 52 public StAXOMBuilder(XMLStreamReader parser) { 53 super(parser); 54 document = new OMDocument(this); 55 omfactory = OMAbstractFactory.getOMFactory(); 56 } 57 58 64 protected OMNode createOMElement() throws OMException { 65 OMElement node; 66 String elementName = parser.getLocalName(); 67 if (lastNode == null) { 68 node = omfactory.createOMElement(elementName, null, null, this); 69 document.setRootElement(node); 70 } else if (lastNode.isComplete()) { 71 node = omfactory.createOMElement(elementName, null, 72 lastNode.getParent(), this); 73 lastNode.setNextSibling(node); 74 node.setPreviousSibling(lastNode); 75 } else { 76 OMElement e = (OMElement) lastNode; 77 node = omfactory.createOMElement(elementName, null, 78 (OMElement) lastNode, this); 79 e.setFirstChild(node); 80 } 81 82 processNamespaceData(node, false); 84 85 processAttributes(node); 87 return node; 88 } 89 90 96 public SOAPEnvelope getOMEnvelope() throws OMException { 97 throw new UnsupportedOperationException (); } 99 100 106 public int next() throws OMException { 107 try { 108 if (done) { 109 throw new OMException(); 110 } 111 115 int token = parser.next(); 116 if (!cache) { 117 return token; 118 } 119 switch (token) { 120 case XMLStreamConstants.START_ELEMENT: 121 lastNode = createOMElement(); 122 break; 123 case XMLStreamConstants.START_DOCUMENT: 124 break; 128 case XMLStreamConstants.CHARACTERS: 129 lastNode = createOMText(); 130 break; 131 case XMLStreamConstants.END_ELEMENT: 132 if (lastNode.isComplete()) { 133 OMElement parent = (OMElement)lastNode.getParent(); 134 parent.setComplete(true); 135 lastNode = parent; 136 } else { 137 OMElement e = (OMElement) lastNode; 138 e.setComplete(true); 139 } 140 break; 141 case XMLStreamConstants.END_DOCUMENT: 142 done = true; 143 break; 144 case XMLStreamConstants.SPACE: 145 next(); 146 break; 147 default : 148 throw new OMException(); 149 } 150 return token; 154 } catch (OMException e) { 155 throw e; 156 } catch (Exception e) { 157 throw new OMException(e); 158 } 159 } 160 161 166 public OMElement getDocumentElement() { 167 return document.getRootElement(); 168 } 169 170 176 protected void processNamespaceData(OMElement node, boolean isSOAPElement) { 177 int namespaceCount = parser.getNamespaceCount(); 178 for (int i = 0; i < namespaceCount; i++) { 179 node.declareNamespace(parser.getNamespaceURI(i), 180 parser.getNamespacePrefix(i)); 181 } 182 183 String namespaceURI = parser.getNamespaceURI(); 185 String prefix = parser.getPrefix(); 186 OMNamespace namespace = null; 187 if (!"".equals(namespaceURI)) { 188 if (prefix == null) { 189 namespace = node.findNamespace(namespaceURI, ""); 191 if (namespace == null) { 192 namespace = node.declareNamespace(namespaceURI, ""); 193 } 194 } else { 195 namespace = node.findNamespace(namespaceURI, prefix); 196 if(namespace == null){ 197 node.setNamespace(omfactory.createOMNamespace(namespaceURI, prefix)); 198 }else{ 199 node.setNamespace(namespace); 200 } 201 } 202 203 } else { 204 } 206 } 207 } 220 | Popular Tags |