< prev index next >

src/java.xml.ws/share/classes/com/sun/xml/internal/messaging/saaj/soap/SOAPDocumentImpl.java

Print this page




 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


< prev index next >