< prev index next >

jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl.java

Print this page

        

*** 25,49 **** package com.sun.xml.internal.messaging.saaj.soap.impl; import java.net.URI; import java.net.URISyntaxException; - import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.namespace.QName; - import javax.xml.soap.*; - import org.w3c.dom.*; import org.w3c.dom.Node; import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl; import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument; import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl; import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl; ! import com.sun.xml.internal.messaging.saaj.util.*; public class ElementImpl implements SOAPElement, SOAPBodyElement { public static final String DSIG_NS = "http://www.w3.org/2000/09/xmldsig#".intern(); public static final String XENC_NS = "http://www.w3.org/2001/04/xmlenc#".intern(); --- 25,65 ---- package com.sun.xml.internal.messaging.saaj.soap.impl; import java.net.URI; import java.net.URISyntaxException; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.namespace.QName; import org.w3c.dom.Node; import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl; import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument; import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl; import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl; ! import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants; ! import com.sun.xml.internal.messaging.saaj.util.NamespaceContextIterator; ! import java.util.ArrayList; ! import java.util.Iterator; ! import java.util.NoSuchElementException; ! import javax.xml.soap.Name; ! import javax.xml.soap.SOAPBodyElement; ! import javax.xml.soap.SOAPConstants; ! import javax.xml.soap.SOAPElement; ! import javax.xml.soap.SOAPException; ! import org.w3c.dom.Attr; ! import org.w3c.dom.CharacterData; ! import org.w3c.dom.DOMException; ! import org.w3c.dom.Document; ! import org.w3c.dom.DocumentFragment; ! import org.w3c.dom.Element; ! import org.w3c.dom.NamedNodeMap; ! import org.w3c.dom.NodeList; ! import org.w3c.dom.TypeInfo; ! import org.w3c.dom.UserDataHandler; public class ElementImpl implements SOAPElement, SOAPBodyElement { public static final String DSIG_NS = "http://www.w3.org/2000/09/xmldsig#".intern(); public static final String XENC_NS = "http://www.w3.org/2001/04/xmlenc#".intern();
*** 106,116 **** return element.removeAttributeNode(oldAttr); } @Override public NodeList getElementsByTagName(String name) { ! return new NodeListImpl(getSoapDocument(), element.getElementsByTagName(name)); } @Override public String getAttributeNS(String namespaceURI, String localName) throws DOMException { return element.getAttributeNS(namespaceURI, localName); --- 122,132 ---- return element.removeAttributeNode(oldAttr); } @Override public NodeList getElementsByTagName(String name) { ! return new NodeListImpl(soapDocument, element.getElementsByTagName(name)); } @Override public String getAttributeNS(String namespaceURI, String localName) throws DOMException { return element.getAttributeNS(namespaceURI, localName);
*** 137,161 **** public ElementImpl(SOAPDocumentImpl ownerDoc, Name name) { this.soapDocument = ownerDoc; this.element = ownerDoc.getDomDocument().createElementNS(name.getURI(), name.getQualifiedName()); elementQName = NameImpl.convertToQName(name); ! getSoapDocument().register(this); } public ElementImpl(SOAPDocumentImpl ownerDoc, QName name) { this.soapDocument = ownerDoc; this.element = ownerDoc.getDomDocument().createElementNS(name.getNamespaceURI(), getQualifiedName(name)); elementQName = name; ! getSoapDocument().register(this); } public ElementImpl(SOAPDocumentImpl ownerDoc, Element domElement) { this.element = domElement; this.soapDocument = ownerDoc; this.elementQName = new QName(domElement.getNamespaceURI(), domElement.getLocalName()); ! getSoapDocument().register(this); } public ElementImpl( SOAPDocumentImpl ownerDoc, String uri, --- 153,177 ---- public ElementImpl(SOAPDocumentImpl ownerDoc, Name name) { this.soapDocument = ownerDoc; this.element = ownerDoc.getDomDocument().createElementNS(name.getURI(), name.getQualifiedName()); elementQName = NameImpl.convertToQName(name); ! soapDocument.register(this); } public ElementImpl(SOAPDocumentImpl ownerDoc, QName name) { this.soapDocument = ownerDoc; this.element = ownerDoc.getDomDocument().createElementNS(name.getNamespaceURI(), getQualifiedName(name)); elementQName = name; ! soapDocument.register(this); } public ElementImpl(SOAPDocumentImpl ownerDoc, Element domElement) { this.element = domElement; this.soapDocument = ownerDoc; this.elementQName = new QName(domElement.getNamespaceURI(), domElement.getLocalName()); ! soapDocument.register(this); } public ElementImpl( SOAPDocumentImpl ownerDoc, String uri,
*** 163,173 **** this.soapDocument = ownerDoc; this.element = ownerDoc.getDomDocument().createElementNS(uri, qualifiedName); elementQName = new QName(uri, getLocalPart(qualifiedName), getPrefix(qualifiedName)); ! getSoapDocument().register(this); } public void ensureNamespaceIsDeclared(String prefix, String uri) { String alreadyDeclaredUri = getNamespaceURI(prefix); if (alreadyDeclaredUri == null || !alreadyDeclaredUri.equals(uri)) { --- 179,189 ---- this.soapDocument = ownerDoc; this.element = ownerDoc.getDomDocument().createElementNS(uri, qualifiedName); elementQName = new QName(uri, getLocalPart(qualifiedName), getPrefix(qualifiedName)); ! soapDocument.register(this); } public void ensureNamespaceIsDeclared(String prefix, String uri) { String alreadyDeclaredUri = getNamespaceURI(prefix); if (alreadyDeclaredUri == null || !alreadyDeclaredUri.equals(uri)) {
*** 176,217 **** } catch (SOAPException e) { /*ignore*/ } } } public Document getOwnerDocument() { return soapDocument; } @Override public Node insertBefore(Node newChild, Node refChild) throws DOMException { ! return element.insertBefore(getSoapDocument().getDomNode(newChild), getSoapDocument().getDomNode(refChild)); } @Override public Node replaceChild(Node newChild, Node oldChild) throws DOMException { ! return element.replaceChild(getSoapDocument().getDomNode(newChild), getSoapDocument().getDomNode(oldChild)); } @Override public Node removeChild(Node oldChild) throws DOMException { ! return element.removeChild(getSoapDocument().getDomNode(oldChild)); } @Override public Node appendChild(Node newChild) throws DOMException { ! return element.appendChild(getSoapDocument().getDomNode(newChild)); } @Override public boolean hasChildNodes() { return element.hasChildNodes(); } @Override public Node cloneNode(boolean deep) { ! return element.cloneNode(deep); } @Override public void normalize() { element.normalize(); --- 192,236 ---- } catch (SOAPException e) { /*ignore*/ } } } + @Override public Document getOwnerDocument() { return soapDocument; } @Override public Node insertBefore(Node newChild, Node refChild) throws DOMException { ! return soapDocument.findIfPresent(element.insertBefore(soapDocument.getDomNode(newChild), soapDocument.getDomNode(refChild))); } @Override public Node replaceChild(Node newChild, Node oldChild) throws DOMException { ! return soapDocument.findIfPresent(element.replaceChild(soapDocument.getDomNode(newChild), soapDocument.getDomNode(oldChild))); } @Override public Node removeChild(Node oldChild) throws DOMException { ! return soapDocument.findIfPresent(element.removeChild(soapDocument.getDomNode(oldChild))); } @Override public Node appendChild(Node newChild) throws DOMException { ! return soapDocument.findIfPresent(element.appendChild(soapDocument.getDomNode(newChild))); } @Override public boolean hasChildNodes() { return element.hasChildNodes(); } @Override public Node cloneNode(boolean deep) { ! Node elementNSNode = element.cloneNode(deep); ! soapDocument.registerChildNodes(elementNSNode, deep); ! return soapDocument.findIfPresent(soapDocument.getDomNode(elementNSNode)); } @Override public void normalize() { element.normalize();
*** 252,262 **** return element.getBaseURI(); } @Override public short compareDocumentPosition(Node other) throws DOMException { ! return element.compareDocumentPosition(other); } @Override public String getTextContent() throws DOMException { return element.getTextContent(); --- 271,281 ---- return element.getBaseURI(); } @Override public short compareDocumentPosition(Node other) throws DOMException { ! return element.compareDocumentPosition(soapDocument.getDomNode(other)); } @Override public String getTextContent() throws DOMException { return element.getTextContent();
*** 267,277 **** element.setTextContent(textContent); } @Override public boolean isSameNode(Node other) { ! return element.isSameNode(other); } @Override public String lookupPrefix(String namespaceURI) { return element.lookupPrefix(namespaceURI); --- 286,296 ---- element.setTextContent(textContent); } @Override public boolean isSameNode(Node other) { ! return element.isSameNode(soapDocument.getDomNode(other)); } @Override public String lookupPrefix(String namespaceURI) { return element.lookupPrefix(namespaceURI);
*** 287,297 **** return element.lookupNamespaceURI(prefix); } @Override public boolean isEqualNode(Node arg) { ! return element.isEqualNode(arg); } @Override public Object getFeature(String feature, String version) { return element.getFeature(feature, version); --- 306,316 ---- return element.lookupNamespaceURI(prefix); } @Override public boolean isEqualNode(Node arg) { ! return element.isEqualNode(soapDocument.getDomNode(arg)); } @Override public Object getFeature(String feature, String version) { return element.getFeature(feature, version);
*** 305,330 **** --- 324,353 ---- @Override public Object getUserData(String key) { return element.getUserData(key); } + @Override public SOAPElement addChildElement(Name name) throws SOAPException { return addElement(name); } + @Override public SOAPElement addChildElement(QName qname) throws SOAPException { return addElement(qname); } + @Override public SOAPElement addChildElement(String localName) throws SOAPException { String nsUri = getNamespaceURI(""); Name name = (nsUri == null || nsUri.isEmpty()) ? NameImpl.createFromUnqualifiedName(localName) : NameImpl.createFromQualifiedName(localName, nsUri); return addChildElement(name); } + @Override public SOAPElement addChildElement(String localName, String prefix) throws SOAPException { String uri = getNamespaceURI(prefix); if (uri == null) { log.log(
*** 335,344 **** --- 358,368 ---- "Unable to locate namespace for prefix " + prefix); } return addChildElement(localName, prefix, uri); } + @Override public String getNamespaceURI(String prefix) { if ("xmlns".equals(prefix)) { return XMLNS_URI; }
*** 413,428 **** --- 437,454 ---- } return null; } + @Override public SOAPElement setElementQName(QName newName) throws SOAPException { ElementImpl copy = new ElementImpl((SOAPDocumentImpl) getOwnerDocument(), newName); return replaceElementWithSOAPElement(this,copy); } + @Override public QName createQName(String localName, String prefix) throws SOAPException { String uri = getNamespaceURI(prefix); if (uri == null) { log.log(Level.SEVERE, "SAAJ0102.impl.cannot.locate.ns",
*** 483,492 **** --- 509,519 ---- public NamespaceContextIterator getNamespaceContextNodes(boolean traverseStack) { return new NamespaceContextIterator(this, traverseStack); } + @Override public SOAPElement addChildElement( String localName, String prefix, String uri) throws SOAPException {
*** 494,503 **** --- 521,531 ---- SOAPElement newElement = createElement(NameImpl.create(localName, prefix, uri)); addNode(newElement); return convertToSoapElement(newElement); } + @Override public SOAPElement addChildElement(SOAPElement element) throws SOAPException { // check if Element falls in SOAP 1.1 or 1.2 namespace. String elementURI = element.getElementName().getURI();
*** 529,551 **** // if body is not empty throw an exception if (!elementURI.equals(this.getElementName().getURI())) { log.severe("SAAJ0158.impl.version.mismatch.fault"); throw new SOAPExceptionImpl("SOAP Version mismatch encountered when trying to add SOAPFault to SOAPBody"); } ! Iterator<Node> it = this.getChildElements(); if (it.hasNext()) { log.severe("SAAJ0156.impl.adding.fault.error"); throw new SOAPExceptionImpl("Cannot add SOAPFault as a child of a non-Empty SOAPBody"); } } } // preserve the encodingStyle attr as it may get lost in the import String encodingStyle = element.getEncodingStyle(); ! final Element domElement = ((ElementImpl) element).getDomElement(); ! final Element importedElement = importElement(domElement); addNode(importedElement); final SOAPElement converted = convertToSoapElement(importedElement); if (encodingStyle != null) --- 557,578 ---- // if body is not empty throw an exception if (!elementURI.equals(this.getElementName().getURI())) { log.severe("SAAJ0158.impl.version.mismatch.fault"); throw new SOAPExceptionImpl("SOAP Version mismatch encountered when trying to add SOAPFault to SOAPBody"); } ! Iterator<javax.xml.soap.Node> it = this.getChildElements(); if (it.hasNext()) { log.severe("SAAJ0156.impl.adding.fault.error"); throw new SOAPExceptionImpl("Cannot add SOAPFault as a child of a non-Empty SOAPBody"); } } } // preserve the encodingStyle attr as it may get lost in the import String encodingStyle = element.getEncodingStyle(); ! final Element importedElement = importElement(element); addNode(importedElement); final SOAPElement converted = convertToSoapElement(importedElement); if (encodingStyle != null)
*** 601,611 **** getOwnerDocument().createElement(getQualifiedName(name)); } } protected void addNode(org.w3c.dom.Node newElement) throws SOAPException { ! insertBefore(getSoapDocument().getDomNode(newElement), null); if (getOwnerDocument() instanceof DocumentFragment) return; if (newElement instanceof ElementImpl) { --- 628,638 ---- getOwnerDocument().createElement(getQualifiedName(name)); } } protected void addNode(org.w3c.dom.Node newElement) throws SOAPException { ! insertBefore(soapDocument.getDomNode(newElement), null); if (getOwnerDocument() instanceof DocumentFragment) return; if (newElement instanceof ElementImpl) {
*** 621,642 **** Element getFirstChildElement() { Node child = getFirstChild(); while (child != null) { if (child instanceof Element) { ! return (Element) getSoapDocument().find(child); } child = child.getNextSibling(); } return null; } protected SOAPElement findChild(NameImpl name) { Node eachChild = getFirstChild(); while (eachChild != null) { if (eachChild instanceof Element) { ! SOAPElement eachChildSoap = (SOAPElement) getSoapDocument().find(eachChild); if (eachChildSoap != null) { if (eachChildSoap.getElementName().equals(name)) { return eachChildSoap; } } --- 648,669 ---- Element getFirstChildElement() { Node child = getFirstChild(); while (child != null) { if (child instanceof Element) { ! return (Element) soapDocument.find(child); } child = child.getNextSibling(); } return null; } protected SOAPElement findChild(NameImpl name) { Node eachChild = getFirstChild(); while (eachChild != null) { if (eachChild instanceof Element) { ! SOAPElement eachChildSoap = (SOAPElement) soapDocument.find(eachChild); if (eachChildSoap != null) { if (eachChildSoap.getElementName().equals(name)) { return eachChildSoap; } }
*** 656,665 **** --- 683,693 ---- } return null; } + @Override public SOAPElement addTextNode(String text) throws SOAPException { if (text.startsWith(CDATAImpl.cdataUC) || text.startsWith(CDATAImpl.cdataLC)) return addCDATA( text.substring(CDATAImpl.cdataUC.length(), text.length() - 3));
*** 678,696 **** --- 706,726 ---- getOwnerDocument().createTextNode(text); addNode(textNode); return this; } + @Override public SOAPElement addAttribute(Name name, String value) throws SOAPException { addAttributeBare(name, value); if (!"".equals(name.getURI())) { ensureNamespaceIsDeclared(name.getPrefix(), name.getURI()); } return this; } + @Override public SOAPElement addAttribute(QName qname, String value) throws SOAPException { addAttributeBare(qname, value); if (!"".equals(qname.getNamespaceURI())) { ensureNamespaceIsDeclared(qname.getPrefix(), qname.getNamespaceURI());
*** 729,738 **** --- 759,769 ---- } else { setAttributeNS(uri, qualifiedName, value); } } + @Override public SOAPElement addNamespaceDeclaration(String prefix, String uri) throws SOAPException { if (prefix.length() > 0) { setAttributeNS(XMLNS_URI, "xmlns:" + prefix, uri); } else {
*** 741,792 **** //Fix for CR:6474641 //tryToFindEncodingStyleAttributeName(); return this; } public String getAttributeValue(Name name) { return getAttributeValueFrom(this, name); } public String getAttributeValue(QName qname) { return getAttributeValueFrom( this, qname.getNamespaceURI(), qname.getLocalPart(), qname.getPrefix(), getQualifiedName(qname)); } ! public Iterator getAllAttributes() { Iterator<Name> i = getAllAttributesFrom(this); ! ArrayList<Name> list = new ArrayList<Name>(); while (i.hasNext()) { Name name = i.next(); if (!"xmlns".equalsIgnoreCase(name.getPrefix())) list.add(name); } return list.iterator(); } ! public Iterator getAllAttributesAsQNames() { Iterator<Name> i = getAllAttributesFrom(this); ! ArrayList<QName> list = new ArrayList<QName>(); while (i.hasNext()) { Name name = i.next(); if (!"xmlns".equalsIgnoreCase(name.getPrefix())) { list.add(NameImpl.convertToQName(name)); } } return list.iterator(); } ! public Iterator getNamespacePrefixes() { return doGetNamespacePrefixes(false); } ! public Iterator getVisibleNamespacePrefixes() { return doGetNamespacePrefixes(true); } protected Iterator<String> doGetNamespacePrefixes(final boolean deep) { return new Iterator<String>() { --- 772,829 ---- //Fix for CR:6474641 //tryToFindEncodingStyleAttributeName(); return this; } + @Override public String getAttributeValue(Name name) { return getAttributeValueFrom(this, name); } + @Override public String getAttributeValue(QName qname) { return getAttributeValueFrom( this, qname.getNamespaceURI(), qname.getLocalPart(), qname.getPrefix(), getQualifiedName(qname)); } ! @Override ! public Iterator<Name> getAllAttributes() { Iterator<Name> i = getAllAttributesFrom(this); ! ArrayList<Name> list = new ArrayList<>(); while (i.hasNext()) { Name name = i.next(); if (!"xmlns".equalsIgnoreCase(name.getPrefix())) list.add(name); } return list.iterator(); } ! @Override ! public Iterator<QName> getAllAttributesAsQNames() { Iterator<Name> i = getAllAttributesFrom(this); ! ArrayList<QName> list = new ArrayList<>(); while (i.hasNext()) { Name name = i.next(); if (!"xmlns".equalsIgnoreCase(name.getPrefix())) { list.add(NameImpl.convertToQName(name)); } } return list.iterator(); } ! @Override ! public Iterator<String> getNamespacePrefixes() { return doGetNamespacePrefixes(false); } ! @Override ! public Iterator<String> getVisibleNamespacePrefixes() { return doGetNamespacePrefixes(true); } protected Iterator<String> doGetNamespacePrefixes(final boolean deep) { return new Iterator<String>() {
*** 803,817 **** --- 840,856 ---- next = attributeKey.substring("xmlns:".length()); } } } + @Override public boolean hasNext() { findNext(); return next != null; } + @Override public String next() { findNext(); if (next == null) { throw new NoSuchElementException(); }
*** 819,828 **** --- 858,868 ---- last = next; next = null; return last; } + @Override public void remove() { if (last == null) { throw new IllegalStateException(); } eachNamespace.remove();
*** 830,851 **** --- 870,895 ---- last = null; } }; } + @Override public Name getElementName() { return NameImpl.convertToName(elementQName); } + @Override public QName getElementQName() { return elementQName; } + @Override public boolean removeAttribute(Name name) { return removeAttribute(name.getURI(), name.getLocalName()); } + @Override public boolean removeAttribute(QName name) { return removeAttribute(name.getNamespaceURI(), name.getLocalPart()); } private boolean removeAttribute(String uri, String localName) {
*** 858,867 **** --- 902,912 ---- } removeAttributeNode(attribute); return true; } + @Override public boolean removeNamespaceDeclaration(String prefix) { org.w3c.dom.Attr declaration = getNamespaceAttr(prefix); if (declaration == null) { return false; }
*** 871,947 **** // ignore } return true; } ! public Iterator<Node> getChildElements() { return getChildElementsFrom(this); } protected SOAPElement convertToSoapElement(Element element) { ! final Node soapNode = getSoapDocument().findIfPresent(element); if (soapNode instanceof SOAPElement) { return (SOAPElement) soapNode; } else { return replaceElementWithSOAPElement( element, (ElementImpl) createElement(NameImpl.copyElementName(element))); } } protected SOAPElement replaceElementWithSOAPElement( Element element, ElementImpl copy) { Iterator<Name> eachAttribute = getAllAttributesFrom(element); while (eachAttribute.hasNext()) { Name name = eachAttribute.next(); copy.addAttributeBare(name, getAttributeValueFrom(element, name)); } ! Iterator<Node> eachChild = getChildElementsFrom(element); while (eachChild.hasNext()) { Node nextChild = eachChild.next(); copy.insertBefore(nextChild, null); } ! Node parent = getSoapDocument().find(element.getParentNode()); if (parent != null) { parent.replaceChild(copy, element); } // XXX else throw an exception? return copy; } protected Iterator<Node> getChildElementNodes() { return new Iterator<Node>() { ! Iterator<Node> eachNode = getChildElements(); Node next = null; Node last = null; public boolean hasNext() { if (next == null) { while (eachNode.hasNext()) { Node node = eachNode.next(); if (node instanceof Element) { ! next = getSoapDocument().findIfPresent(node); break; } } } return next != null; } ! public Node next() { if (hasNext()) { last = next; next = null; ! return last; } throw new NoSuchElementException(); } public void remove() { if (last == null) { throw new IllegalStateException(); } Node target = last; --- 916,1078 ---- // ignore } return true; } ! @Override ! public Iterator<javax.xml.soap.Node> getChildElements() { return getChildElementsFrom(this); } protected SOAPElement convertToSoapElement(Element element) { ! final Node soapNode = soapDocument.findIfPresent(element); if (soapNode instanceof SOAPElement) { return (SOAPElement) soapNode; } else { return replaceElementWithSOAPElement( element, (ElementImpl) createElement(NameImpl.copyElementName(element))); } } + protected TextImpl convertToSoapText(CharacterData characterData) { + final Node soapNode = getSoapDocument().findIfPresent(characterData); + if (soapNode instanceof TextImpl) { + return (TextImpl) soapNode; + } else { + TextImpl t = null; + switch (characterData.getNodeType()) { + case CDATA_SECTION_NODE: + t = new CDATAImpl(getSoapDocument(), characterData.getData()); + break; + case COMMENT_NODE: + t = new SOAPCommentImpl(getSoapDocument(), characterData.getData()); + break; + case TEXT_NODE: + t = new SOAPTextImpl(getSoapDocument(), characterData.getData()); + break; + } + Node parent = getSoapDocument().find(characterData.getParentNode()); + if (parent != null) { + parent.replaceChild(t, characterData); + } // XXX else throw an exception? + + return t; + + // return replaceElementWithSOAPElement( + // element, + // (ElementImpl) createElement(NameImpl.copyElementName(element))); + } + } + protected SOAPElement replaceElementWithSOAPElement( Element element, ElementImpl copy) { Iterator<Name> eachAttribute = getAllAttributesFrom(element); while (eachAttribute.hasNext()) { Name name = eachAttribute.next(); copy.addAttributeBare(name, getAttributeValueFrom(element, name)); } ! Iterator<Node> eachChild = getChildElementsFromDOM(element); while (eachChild.hasNext()) { Node nextChild = eachChild.next(); copy.insertBefore(nextChild, null); } ! Node parent = soapDocument.find(element.getParentNode()); if (parent != null) { parent.replaceChild(copy, element); } // XXX else throw an exception? return copy; } + private Iterator<Node> getChildElementsFromDOM(final Element el) { + return new Iterator<Node>() { + Node next = el.getFirstChild(); + Node nextNext = null; + Node last = null; + Node soapElement = getSoapDocument().findIfPresent(el); + + @Override + public boolean hasNext() { + if (next != null) { + return true; + } + if (nextNext != null) { + next = nextNext; + } + + return next != null; + } + + public Node next() { + if (hasNext()) { + last = next; + next = null; + + if ((soapElement instanceof ElementImpl) + && (last instanceof Element)) { + last = + ((ElementImpl) soapElement).convertToSoapElement( + (Element) last); + } else if ((soapElement instanceof ElementImpl) && (last instanceof CharacterData)) { + last = ((ElementImpl) soapElement).convertToSoapText( + (CharacterData) last); + } + + nextNext = last.getNextSibling(); + return last; + } + throw new NoSuchElementException(); + } + + @Override + public void remove() { + if (last == null) { + throw new IllegalStateException(); + } + Node target = last; + last = null; + el.removeChild(target); + } + }; + } + protected Iterator<Node> getChildElementNodes() { return new Iterator<Node>() { ! Iterator<javax.xml.soap.Node> eachNode = getChildElements(); Node next = null; Node last = null; + @Override public boolean hasNext() { if (next == null) { while (eachNode.hasNext()) { Node node = eachNode.next(); if (node instanceof Element) { ! next = soapDocument.findIfPresent(node); break; } } } return next != null; } ! @Override ! public javax.xml.soap.Node next() { if (hasNext()) { last = next; next = null; ! return (javax.xml.soap.Node) last; } throw new NoSuchElementException(); } + @Override public void remove() { if (last == null) { throw new IllegalStateException(); } Node target = last;
*** 949,972 **** removeChild(target); } }; } ! public Iterator getChildElements(final Name name) { return getChildElements(name.getURI(), name.getLocalName()); } ! public Iterator getChildElements(final QName qname) { return getChildElements(qname.getNamespaceURI(), qname.getLocalPart()); } ! private Iterator<Node> getChildElements(final String nameUri, final String nameLocal) { ! return new Iterator<Node>() { Iterator<Node> eachElement = getChildElementNodes(); Node next = null; Node last = null; public boolean hasNext() { if (next == null) { while (eachElement.hasNext()) { Node element = eachElement.next(); String elementUri = element.getNamespaceURI(); --- 1080,1106 ---- removeChild(target); } }; } ! @Override ! public Iterator<javax.xml.soap.Node> getChildElements(final Name name) { return getChildElements(name.getURI(), name.getLocalName()); } ! @Override ! public Iterator<javax.xml.soap.Node> getChildElements(final QName qname) { return getChildElements(qname.getNamespaceURI(), qname.getLocalPart()); } ! private Iterator<javax.xml.soap.Node> getChildElements(final String nameUri, final String nameLocal) { ! return new Iterator<javax.xml.soap.Node>() { Iterator<Node> eachElement = getChildElementNodes(); Node next = null; Node last = null; + @Override public boolean hasNext() { if (next == null) { while (eachElement.hasNext()) { Node element = eachElement.next(); String elementUri = element.getNamespaceURI();
*** 980,998 **** } } return next != null; } ! public Node next() { if (!hasNext()) { throw new NoSuchElementException(); } last = next; next = null; ! return last; } public void remove() { if (last == null) { throw new IllegalStateException(); } Node target = last; --- 1114,1134 ---- } } return next != null; } ! @Override ! public javax.xml.soap.Node next() { if (!hasNext()) { throw new NoSuchElementException(); } last = next; next = null; ! return (javax.xml.soap.Node) last; } + @Override public void remove() { if (last == null) { throw new IllegalStateException(); } Node target = last;
*** 1000,1009 **** --- 1136,1146 ---- removeChild(target); } }; } + @Override public void removeContents() { Node currentChild = getFirstChild(); while (currentChild != null) { Node temp = currentChild.getNextSibling();
*** 1018,1027 **** --- 1155,1165 ---- } currentChild = temp; } } + @Override public void setEncodingStyle(String encodingStyle) throws SOAPException { if (!"".equals(encodingStyle)) { try { new URI(encodingStyle); } catch (URISyntaxException m) {
*** 1035,1044 **** --- 1173,1183 ---- } encodingStyleAttribute.setValue(encodingStyle); tryToFindEncodingStyleAttributeName(); } + @Override public String getEncodingStyle() { String encodingStyle = encodingStyleAttribute.getValue(); if (encodingStyle != null) return encodingStyle; String soapNamespace = getSOAPNamespace();
*** 1056,1070 **** --- 1195,1211 ---- } return null; } // Node methods + @Override public String getValue() { javax.xml.soap.Node valueNode = getValueNode(); return valueNode == null ? null : valueNode.getValue(); } + @Override public void setValue(String value) { Node valueNode = getValueNodeStrict(); if (valueNode != null) { valueNode.setNodeValue(value); } else {
*** 1090,1114 **** return null; } protected javax.xml.soap.Node getValueNode() { ! Iterator<Node> i = getChildElements(); while (i.hasNext()) { Node n = i.next(); if (n.getNodeType() == org.w3c.dom.Node.TEXT_NODE || n.getNodeType() == org.w3c.dom.Node.CDATA_SECTION_NODE) { // TODO: Hack to fix text node split into multiple lines. normalize(); // Should remove the normalization step when this gets fixed in // DOM/Xerces. ! return getSoapDocument().find(n); } } return null; } public void setParentElement(SOAPElement element) throws SOAPException { if (element == null) { log.severe("SAAJ0106.impl.no.null.to.parent.elem"); throw new SOAPException("Cannot pass NULL to setParentElement"); } --- 1231,1256 ---- return null; } protected javax.xml.soap.Node getValueNode() { ! Iterator<javax.xml.soap.Node> i = getChildElements(); while (i.hasNext()) { Node n = i.next(); if (n.getNodeType() == org.w3c.dom.Node.TEXT_NODE || n.getNodeType() == org.w3c.dom.Node.CDATA_SECTION_NODE) { // TODO: Hack to fix text node split into multiple lines. normalize(); // Should remove the normalization step when this gets fixed in // DOM/Xerces. ! return soapDocument.find(n); } } return null; } + @Override public void setParentElement(SOAPElement element) throws SOAPException { if (element == null) { log.severe("SAAJ0106.impl.no.null.to.parent.elem"); throw new SOAPException("Cannot pass NULL to setParentElement"); }
*** 1136,1151 **** soapNamespacePrefix, soapNamespace); encodingStyleAttribute.setName(encodingStyleAttributeName); } public SOAPElement getParentElement() { Node parentNode = getParentNode(); if (parentNode instanceof SOAPDocument) { return null; } ! return (SOAPElement) getSoapDocument().find(parentNode); } protected String getSOAPNamespace() { String soapNamespace = null; --- 1278,1294 ---- soapNamespacePrefix, soapNamespace); encodingStyleAttribute.setName(encodingStyleAttributeName); } + @Override public SOAPElement getParentElement() { Node parentNode = getParentNode(); if (parentNode instanceof SOAPDocument) { return null; } ! return (SOAPElement) soapDocument.find(parentNode); } protected String getSOAPNamespace() { String soapNamespace = null;
*** 1165,1174 **** --- 1308,1318 ---- } return soapNamespace; } + @Override public void detachNode() { Node parent = getParentNode(); if (parent != null) { parent.removeChild(element); }
*** 1182,1191 **** --- 1326,1336 ---- findEncodingStyleAttributeName(); } catch (SOAPException e) { /*okay to fail*/ } } + @Override public void recycleNode() { detachNode(); // TBD // - add this to the factory so subsequent // creations can reuse this object.
*** 1258,1271 **** --- 1403,1418 ---- return new Iterator<Name>() { int attributesLength = attributes.getLength(); int attributeIndex = 0; String currentName; + @Override public boolean hasNext() { return attributeIndex < attributesLength; } + @Override public Name next() { if (!hasNext()) { throw new NoSuchElementException(); } Node current = attributes.item(attributeIndex++);
*** 1281,1290 **** --- 1428,1438 ---- current.getNamespaceURI()); return attributeName; } } + @Override public void remove() { if (currentName == null) { throw new IllegalStateException(); } attributes.removeNamedItem(currentName);
*** 1329,1345 **** attribute = element.getAttributeNode(qualifiedName); return attribute == null ? null : attribute.getValue(); } ! protected Iterator<Node> getChildElementsFrom(final Element element) { ! return new Iterator<Node>() { Node next = element.getFirstChild(); Node nextNext = null; Node last = null; ! Node soapElement = getSoapDocument().findIfPresent(element); public boolean hasNext() { if (next != null) { return true; } if (nextNext != null) { --- 1477,1494 ---- attribute = element.getAttributeNode(qualifiedName); return attribute == null ? null : attribute.getValue(); } ! protected Iterator<javax.xml.soap.Node> getChildElementsFrom(final Element element) { ! return new Iterator<javax.xml.soap.Node>() { Node next = element.getFirstChild(); Node nextNext = null; Node last = null; ! Node soapElement = soapDocument.findIfPresent(element); + @Override public boolean hasNext() { if (next != null) { return true; } if (nextNext != null) {
*** 1347,1357 **** } return next != null; } ! public Node next() { if (hasNext()) { last = next; next = null; if ((soapElement instanceof ElementImpl) --- 1496,1507 ---- } return next != null; } ! @Override ! public javax.xml.soap.Node next() { if (hasNext()) { last = next; next = null; if ((soapElement instanceof ElementImpl)
*** 1360,1374 **** ((ElementImpl) soapElement).convertToSoapElement( (Element) last); } nextNext = last.getNextSibling(); ! return getSoapDocument().findIfPresent(last); } throw new NoSuchElementException(); } public void remove() { if (last == null) { throw new IllegalStateException(); } Node target = last; --- 1510,1525 ---- ((ElementImpl) soapElement).convertToSoapElement( (Element) last); } nextNext = last.getNextSibling(); ! return (javax.xml.soap.Node) soapDocument.findIfPresent(last); } throw new NoSuchElementException(); } + @Override public void remove() { if (last == null) { throw new IllegalStateException(); } Node target = last;
*** 1426,1435 **** --- 1577,1587 ---- } //TODO: This is a temporary SAAJ workaround for optimizing XWS // should be removed once the corresponding JAXP bug is fixed // It appears the bug will be fixed in JAXP 1.4 (not by Appserver 9 timeframe) + @Override public void setAttributeNS( String namespaceURI,String qualifiedName, String value) { int index = qualifiedName.indexOf(':'); String localName; if (index < 0)
*** 1481,1491 **** return element.setAttributeNodeNS(newAttr); } @Override public NodeList getElementsByTagNameNS(String namespaceURI, String localName) throws DOMException { ! return new NodeListImpl(getSoapDocument(), element.getElementsByTagNameNS(namespaceURI, localName)); } @Override public boolean hasAttribute(String name) { return element.hasAttribute(name); --- 1633,1643 ---- return element.setAttributeNodeNS(newAttr); } @Override public NodeList getElementsByTagNameNS(String namespaceURI, String localName) throws DOMException { ! return new NodeListImpl(soapDocument, element.getElementsByTagNameNS(namespaceURI, localName)); } @Override public boolean hasAttribute(String name) { return element.hasAttribute(name);
*** 1536,1576 **** return element.getNodeType(); } @Override public Node getParentNode() { ! return getSoapDocument().find(element.getParentNode()); } @Override public NodeList getChildNodes() { ! return new NodeListImpl(getSoapDocument(), element.getChildNodes()); } @Override public Node getFirstChild() { ! return getSoapDocument().findIfPresent(element.getFirstChild()); } @Override public Node getLastChild() { ! return getSoapDocument().findIfPresent(element.getLastChild()); } @Override public Node getPreviousSibling() { ! return getSoapDocument().findIfPresent(element.getPreviousSibling()); } @Override public Node getNextSibling() { ! return getSoapDocument().findIfPresent(element.getNextSibling()); } @Override public NamedNodeMap getAttributes() { ! return element.getAttributes(); } public Element getDomElement() { return element; } --- 1688,1728 ---- return element.getNodeType(); } @Override public Node getParentNode() { ! return soapDocument.find(element.getParentNode()); } @Override public NodeList getChildNodes() { ! return new NodeListImpl(soapDocument, element.getChildNodes()); } @Override public Node getFirstChild() { ! return soapDocument.findIfPresent(element.getFirstChild()); } @Override public Node getLastChild() { ! return soapDocument.findIfPresent(element.getLastChild()); } @Override public Node getPreviousSibling() { ! return soapDocument.findIfPresent(element.getPreviousSibling()); } @Override public Node getNextSibling() { ! return soapDocument.findIfPresent(element.getNextSibling()); } @Override public NamedNodeMap getAttributes() { ! return new NamedNodeMapImpl(element.getAttributes(), soapDocument); } public Element getDomElement() { return element; }
< prev index next >