< 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 >