203 public EntityReference createEntityReference(String name)
204 throws DOMException {
205 log.severe("SAAJ0543.soap.entity.refs.not.allowed.in.docs");
206 throw new UnsupportedOperationException("Entity References are not allowed in SOAP documents");
207 }
208
209 @Override
210 public NodeList getElementsByTagName(String tagname) {
211 return new NodeListImpl(this, document.getElementsByTagName(tagname));
212 }
213
214 @Override
215 public org.w3c.dom.Node importNode(Node importedNode, boolean deep)
216 throws DOMException {
217 Node domNode = getDomNode(importedNode);
218 final Node newNode = document.importNode(domNode, deep);
219
220 if (importedNode instanceof javax.xml.soap.Node) {
221 Node newSoapNode = createSoapNode(importedNode.getClass(), newNode);
222 newNode.setUserData(SAAJ_NODE, newSoapNode, null);
223 if (deep && importedNode.hasChildNodes()) {
224 NodeList childNodes = importedNode.getChildNodes();
225 for (int i = 0; i < childNodes.getLength(); i++) {
226 registerChildNodes(childNodes.item(i), deep);
227 }
228 }
229 return newSoapNode;
230 }
231
232 registerChildNodes(newNode, deep);
233 return findIfPresent(newNode);
234 }
235
236 //If the parentNode is not registered to domToSoap, create soap wapper for parentNode and register it to domToSoap
237 //If deep = true, also register all children of parentNode to domToSoap map.
238 public void registerChildNodes(Node parentNode, boolean deep) {
239 if (parentNode.getUserData(SAAJ_NODE) == null) {
240 if (parentNode instanceof Element) {
241 ElementFactory.createElement(this, (Element) parentNode);
242 } else if (parentNode instanceof CharacterData) {
243 switch (parentNode.getNodeType()) {
244 case CDATA_SECTION_NODE:
245 new CDATAImpl(this, (CharacterData) parentNode);
246 break;
247 case COMMENT_NODE:
248 new SOAPCommentImpl(this, (CharacterData) parentNode);
249 break;
250 case TEXT_NODE:
251 new SOAPTextImpl(this, (CharacterData) parentNode);
252 break;
253 }
254 }
255 }
256 if (deep) {
257 NodeList nodeList = parentNode.getChildNodes();
258 for (int i = 0; i < nodeList.getLength(); i++) {
259 Node nextChild = nodeList.item(i);
260 registerChildNodes(nextChild, true);
261 }
262 }
263 }
264
265 @Override
266 public Element createElementNS(String namespaceURI, String qualifiedName)
267 throws DOMException {
268 return ElementFactory.createElement(
269 this,
270 NameImpl.getLocalNameFromTagName(qualifiedName),
271 NameImpl.getPrefixFromTagName(qualifiedName),
272 namespaceURI);
273 }
395 return findIfPresent(document.getFirstChild());
396 }
397
398 @Override
399 public Node getLastChild() {
400 return findIfPresent(document.getLastChild());
401 }
402
403 @Override
404 public Node getPreviousSibling() {
405 return findIfPresent(document.getPreviousSibling());
406 }
407
408 @Override
409 public Node getNextSibling() {
410 return findIfPresent(document.getNextSibling());
411 }
412
413 @Override
414 public NamedNodeMap getAttributes() {
415 return new NamedNodeMapImpl(document.getAttributes(), this);
416 }
417
418 @Override
419 public Document getOwnerDocument() {
420 return document.getOwnerDocument();
421 }
422
423 @Override
424 public Node insertBefore(Node newChild, Node refChild) throws DOMException {
425 return document.insertBefore(getDomNode(newChild), getDomNode(refChild));
426 }
427
428 @Override
429 public Node replaceChild(Node newChild, Node oldChild) throws DOMException {
430 return document.replaceChild(getDomNode(newChild), getDomNode(oldChild));
431 }
432
433 @Override
434 public Node removeChild(Node oldChild) throws DOMException {
435 return document.removeChild(getDomNode(oldChild));
607 return found != null ? found : node;
608 }
609
610 /**
611 * Extracts w3c dom node from corresponding soap wrapper.
612 *
613 * @param node soap or dom nullable
614 * @return dom node
615 */
616 public Node getDomNode(Node node) {
617 if (node instanceof SOAPDocumentImpl) {
618 return ((SOAPDocumentImpl)node).getDomElement();
619 } else if (node instanceof ElementImpl) {
620 return ((ElementImpl) node).getDomElement();
621 } else if (node instanceof SOAPTextImpl) {
622 return ((SOAPTextImpl)node).getDomElement();
623 } else if (node instanceof SOAPCommentImpl) {
624 return ((SOAPCommentImpl)node).getDomElement();
625 } else if (node instanceof CDATAImpl) {
626 return ((CDATAImpl) node).getDomElement();
627 }
628 return node;
629 }
630
631
632 private Node createSoapNode(Class nodeType, Node node) {
633 if (SOAPTextImpl.class.isAssignableFrom(nodeType)) {
634 return new SOAPTextImpl(this, (Text) node);
635 } else if (SOAPCommentImpl.class.isAssignableFrom(nodeType)) {
636 return new SOAPCommentImpl(this, (Comment) node);
637 } else if (CDATAImpl.class.isAssignableFrom(nodeType)) {
638 return new CDATAImpl(this, (CDATASection) node);
639 }
640 try {
641 Constructor<Node> constructor = nodeType.getConstructor(SOAPDocumentImpl.class, Element.class);
642 return constructor.newInstance(this, node);
643 } catch (Exception e) {
644 throw new IllegalStateException(e);
645 }
646 }
647
648
649 public Document getDomElement() {
650 return document;
651 }
652
653 @Override
654 public String getValue() {
655 throw new UnsupportedOperationException();
656 }
657
658 @Override
|
203 public EntityReference createEntityReference(String name)
204 throws DOMException {
205 log.severe("SAAJ0543.soap.entity.refs.not.allowed.in.docs");
206 throw new UnsupportedOperationException("Entity References are not allowed in SOAP documents");
207 }
208
209 @Override
210 public NodeList getElementsByTagName(String tagname) {
211 return new NodeListImpl(this, document.getElementsByTagName(tagname));
212 }
213
214 @Override
215 public org.w3c.dom.Node importNode(Node importedNode, boolean deep)
216 throws DOMException {
217 Node domNode = getDomNode(importedNode);
218 final Node newNode = document.importNode(domNode, deep);
219
220 if (importedNode instanceof javax.xml.soap.Node) {
221 Node newSoapNode = createSoapNode(importedNode.getClass(), newNode);
222 newNode.setUserData(SAAJ_NODE, newSoapNode, null);
223 if (deep && newSoapNode.hasChildNodes()) {
224 NodeList childNodes = newSoapNode.getChildNodes();
225 for (int i = 0; i < childNodes.getLength(); i++) {
226 registerChildNodes(childNodes.item(i), deep);
227 }
228 }
229 return newSoapNode;
230 }
231
232 registerChildNodes(newNode, deep);
233 return findIfPresent(newNode);
234 }
235
236 /**
237 * If the parentNode is not registered to domToSoap, create soap wapper for parentNode and register it to domToSoap
238 * If deep = true, also register all children transitively of parentNode to domToSoap map.
239 * @param parentNode node to wrap
240 * @param deep wrap child nodes transitively
241 */
242 public void registerChildNodes(Node parentNode, boolean deep) {
243 if (parentNode.getUserData(SAAJ_NODE) == null) {
244 if (parentNode instanceof Element) {
245 ElementFactory.createElement(this, (Element) parentNode);
246 } else if (parentNode instanceof CharacterData) {
247 switch (parentNode.getNodeType()) {
248 case CDATA_SECTION_NODE:
249 new CDATAImpl(this, (CharacterData) parentNode);
250 break;
251 case COMMENT_NODE:
252 new SOAPCommentImpl(this, (CharacterData) parentNode);
253 break;
254 case TEXT_NODE:
255 new SOAPTextImpl(this, (CharacterData) parentNode);
256 break;
257 }
258 } else if (parentNode instanceof DocumentFragment) {
259 new SOAPDocumentFragment(this, (DocumentFragment) parentNode);
260 }
261 }
262 if (deep) {
263 NodeList nodeList = parentNode.getChildNodes();
264 for (int i = 0; i < nodeList.getLength(); i++) {
265 Node nextChild = nodeList.item(i);
266 registerChildNodes(nextChild, true);
267 }
268 }
269 }
270
271 @Override
272 public Element createElementNS(String namespaceURI, String qualifiedName)
273 throws DOMException {
274 return ElementFactory.createElement(
275 this,
276 NameImpl.getLocalNameFromTagName(qualifiedName),
277 NameImpl.getPrefixFromTagName(qualifiedName),
278 namespaceURI);
279 }
401 return findIfPresent(document.getFirstChild());
402 }
403
404 @Override
405 public Node getLastChild() {
406 return findIfPresent(document.getLastChild());
407 }
408
409 @Override
410 public Node getPreviousSibling() {
411 return findIfPresent(document.getPreviousSibling());
412 }
413
414 @Override
415 public Node getNextSibling() {
416 return findIfPresent(document.getNextSibling());
417 }
418
419 @Override
420 public NamedNodeMap getAttributes() {
421 NamedNodeMap attributes = document.getAttributes();
422 if (attributes == null) {
423 return null;
424 }
425 return new NamedNodeMapImpl(attributes, this);
426 }
427
428 @Override
429 public Document getOwnerDocument() {
430 return document.getOwnerDocument();
431 }
432
433 @Override
434 public Node insertBefore(Node newChild, Node refChild) throws DOMException {
435 return document.insertBefore(getDomNode(newChild), getDomNode(refChild));
436 }
437
438 @Override
439 public Node replaceChild(Node newChild, Node oldChild) throws DOMException {
440 return document.replaceChild(getDomNode(newChild), getDomNode(oldChild));
441 }
442
443 @Override
444 public Node removeChild(Node oldChild) throws DOMException {
445 return document.removeChild(getDomNode(oldChild));
617 return found != null ? found : node;
618 }
619
620 /**
621 * Extracts w3c dom node from corresponding soap wrapper.
622 *
623 * @param node soap or dom nullable
624 * @return dom node
625 */
626 public Node getDomNode(Node node) {
627 if (node instanceof SOAPDocumentImpl) {
628 return ((SOAPDocumentImpl)node).getDomElement();
629 } else if (node instanceof ElementImpl) {
630 return ((ElementImpl) node).getDomElement();
631 } else if (node instanceof SOAPTextImpl) {
632 return ((SOAPTextImpl)node).getDomElement();
633 } else if (node instanceof SOAPCommentImpl) {
634 return ((SOAPCommentImpl)node).getDomElement();
635 } else if (node instanceof CDATAImpl) {
636 return ((CDATAImpl) node).getDomElement();
637 } else if (node instanceof SOAPDocumentFragment) {
638 return ((SOAPDocumentFragment)node).getDomNode();
639 }
640 return node;
641 }
642
643
644 private Node createSoapNode(Class nodeType, Node node) {
645 if (SOAPTextImpl.class.isAssignableFrom(nodeType)) {
646 return new SOAPTextImpl(this, (Text) node);
647 } else if (SOAPCommentImpl.class.isAssignableFrom(nodeType)) {
648 return new SOAPCommentImpl(this, (Comment) node);
649 } else if (CDATAImpl.class.isAssignableFrom(nodeType)) {
650 return new CDATAImpl(this, (CDATASection) node);
651 } else if (SOAPDocumentFragment.class.isAssignableFrom(nodeType)) {
652 return new SOAPDocumentFragment(this, (DocumentFragment) node);
653 }
654 try {
655 Constructor<Node> constructor = nodeType.getConstructor(SOAPDocumentImpl.class, Element.class);
656 return constructor.newInstance(this, node);
657 } catch (Exception e) {
658 throw new IllegalStateException(e);
659 }
660 }
661
662
663 public Document getDomElement() {
664 return document;
665 }
666
667 @Override
668 public String getValue() {
669 throw new UnsupportedOperationException();
670 }
671
672 @Override
|