Author: veithen Date: Thu Jul 10 21:51:14 2014 New Revision: 1609578 URL: http://svn.apache.org/r1609578 Log: SAAJ: * Eliminate usage of Axiom's internal setParent method. * Use the new SAAJ test suite from Axiom. * Fixed some bugs in the implementation. * Removed two invalid test cases (that don't pass with the SAAJ reference implementation).
Added: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java - copied, changed from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java (contents, props changed) - copied, changed from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java (with props) axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java - copied, changed from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java Removed: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java Modified: axis/axis2/java/core/trunk/modules/saaj/pom.xml axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java Modified: axis/axis2/java/core/trunk/modules/saaj/pom.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/pom.xml?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/pom.xml (original) +++ axis/axis2/java/core/trunk/modules/saaj/pom.xml Thu Jul 10 21:51:14 2014 @@ -101,6 +101,12 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.apache.ws.commons.axiom</groupId> + <artifactId>saaj-testsuite</artifactId> + <version>${axiom.version}</version> + <scope>test</scope> + </dependency> <!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends on Sun's internal copy of Xerces. See AXIS2-4228. --> <dependency> Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java Thu Jul 10 21:51:14 2014 @@ -18,19 +18,16 @@ */ package org.apache.axis2.saaj; -import javax.xml.soap.SOAPElement; - +import org.apache.axiom.om.OMComment; import org.w3c.dom.Comment; public class CommentImpl extends TextImplEx implements Comment { - - public CommentImpl(String data, SOAPElement parent) { - super(data, parent); + public CommentImpl(OMComment textNode) { + super(textNode); } - public CommentImpl(String data, SOAPElement parent, - org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) { - super(data, parent, prevSibling, nextSibling); + public CommentImpl(String data) { + super(data); } public boolean isComment() { Copied: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java (from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java) URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java?p2=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java&p1=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java&r1=1608843&r2=1609578&rev=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java Thu Jul 10 21:51:14 2014 @@ -18,22 +18,12 @@ */ package org.apache.axis2.saaj; -import javax.xml.soap.SOAPElement; +import javax.xml.soap.Node; -import org.w3c.dom.Comment; +import org.apache.axiom.om.OMNode; -public class CommentImpl extends TextImplEx implements Comment { - - public CommentImpl(String data, SOAPElement parent) { - super(data, parent); - } - - public CommentImpl(String data, SOAPElement parent, - org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) { - super(data, parent, prevSibling, nextSibling); - } - - public boolean isComment() { - return true; +public abstract class NodeImpl<T extends org.w3c.dom.Node, S extends OMNode> extends ProxyNode<T,S> implements Node { + public NodeImpl(T target, S omTarget) { + super(target, omTarget); } } Copied: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java (from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java) URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java?p2=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java&p1=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java&r1=1608843&r2=1609578&rev=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java Thu Jul 10 21:51:14 2014 @@ -19,10 +19,14 @@ package org.apache.axis2.saaj; +import org.apache.axiom.om.OMComment; import org.apache.axiom.om.OMContainer; +import org.apache.axiom.om.OMDocument; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMException; +import org.apache.axiom.om.OMInformationItem; import org.apache.axiom.om.OMNode; +import org.apache.axiom.om.OMText; import org.apache.axiom.soap.SOAPBody; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.SOAPFault; @@ -31,17 +35,15 @@ import org.apache.axiom.soap.SOAPFaultNo import org.apache.axiom.soap.SOAPHeader; import org.apache.axiom.soap.SOAPHeaderBlock; import org.w3c.dom.Attr; -import org.w3c.dom.Comment; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import org.w3c.dom.Text; import org.w3c.dom.TypeInfo; import org.w3c.dom.UserDataHandler; -import javax.xml.soap.Node; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; @@ -50,15 +52,16 @@ import javax.xml.soap.SOAPException; * some tree manipulation methods. This interface provides methods for getting the value of a node, * for getting and setting the parent of a node, and for removing a node. */ -public abstract class SAAJNode<T extends org.w3c.dom.Node, S extends OMNode> implements Node { +public abstract class ProxyNode<T extends org.w3c.dom.Node, S extends OMInformationItem> implements Node { protected final T target; protected final S omTarget; protected SOAPElement parentElement; static final String SAAJ_NODE = "saaj.node"; - public SAAJNode(T target, S omTarget) { + public ProxyNode(T target, S omTarget) { this.target = target; this.omTarget = omTarget; + target.setUserData(SAAJ_NODE, this, null); } public final T getTarget() { @@ -159,7 +162,7 @@ public abstract class SAAJNode<T extends * @param domNode * @return the SAAJ Node corresponding to the domNode */ - javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) { + Node toSAAJNode(Node domNode) { return toSAAJNode(domNode, this); } @@ -169,7 +172,7 @@ public abstract class SAAJNode<T extends * @param domNode * @return the SAAJ Node corresponding to the domNode */ - static javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode, Node parentNode) { + static Node toSAAJNode(Node domNode, Node parentNode) { if (domNode == null) { return null; } @@ -177,42 +180,17 @@ public abstract class SAAJNode<T extends if (saajNode == null) { // if SAAJ node has not been set in userData, try to construct it return toSAAJNode2(domNode, parentNode); } - // update siblings for text nodes - if (domNode instanceof org.w3c.dom.Text || domNode instanceof org.w3c.dom.Comment) { - org.w3c.dom.Node prevSiblingDOMNode = domNode.getPreviousSibling(); - org.w3c.dom.Node nextSiblingDOMNode = domNode.getNextSibling(); - - TextImplEx saajTextNode = (TextImplEx)saajNode; - - saajTextNode.setPreviousSibling(prevSiblingDOMNode); - saajTextNode.setNextSibling(nextSiblingDOMNode); - } return saajNode; } - private static javax.xml.soap.Node toSAAJNode2(org.w3c.dom.Node domNode, Node parentNode) { + private static Node toSAAJNode2(Node domNode, Node parentNode) { if (domNode == null) { return null; } if (domNode instanceof org.w3c.dom.Text) { - Text text = (Text)domNode; - org.w3c.dom.Node prevSiblingDOMNode = text.getPreviousSibling(); - org.w3c.dom.Node nextSiblingDOMNode = text.getNextSibling(); - SOAPElementImpl<OMElement> parent = new SOAPElementImpl<OMElement>((OMElement)domNode.getParentNode()); - TextImplEx saajTextNode = - new TextImplEx(text.getData(), parent, prevSiblingDOMNode, nextSiblingDOMNode); - domNode.setUserData(SAAJ_NODE, saajTextNode, null); - return saajTextNode; + return new TextImplEx((OMText)domNode); } else if (domNode instanceof org.w3c.dom.Comment) { - Comment comment = (Comment)domNode; - org.w3c.dom.Node prevSiblingDOMNode = comment.getPreviousSibling(); - org.w3c.dom.Node nextSiblingDOMNode = comment.getNextSibling(); - SOAPElementImpl<OMElement> parent = new SOAPElementImpl<OMElement>((OMElement)domNode.getParentNode()); - CommentImpl saajTextNode = new CommentImpl(comment.getData(), - parent, prevSiblingDOMNode, - nextSiblingDOMNode); - domNode.setUserData(SAAJ_NODE, saajTextNode, null); - return saajTextNode; + return new CommentImpl((OMComment)domNode); } else if (domNode instanceof SOAPBody) { javax.xml.soap.SOAPBody saajSOAPBody = new org.apache.axis2.saaj.SOAPBodyImpl((SOAPBody)domNode); @@ -249,27 +227,7 @@ public abstract class SAAJNode<T extends domNode.setUserData(SAAJ_NODE, saajSOAPHeader, null); return saajSOAPHeader; } else if (domNode instanceof Document) { - - // Must be a SOAPEnvelope - if (!(parentNode instanceof org.apache.axis2.saaj.SOAPEnvelopeImpl)) { - return null; - } - org.apache.axis2.saaj.SOAPEnvelopeImpl saajEnv = - (org.apache.axis2.saaj.SOAPEnvelopeImpl) parentNode; - javax.xml.soap.SOAPPart saajSOAPPart = null; - if (saajEnv.getSOAPPartParent() != null) { - // return existing SOAPPart - saajSOAPPart = saajEnv.getSOAPPartParent(); - - } else { - // Create Message and SOAPPart - SOAPMessageImpl saajSOAPMessage = - new SOAPMessageImpl(saajEnv); - saajSOAPPart = saajSOAPMessage.getSOAPPart(); - } - - domNode.setUserData(SAAJ_NODE, saajSOAPPart, null); - return saajSOAPPart; + return new SAAJDocument((OMDocument)domNode); } else { // instanceof org.apache.axis2.om.impl.dom.ElementImpl SOAPElementImpl<OMElement> saajSOAPElement = new SOAPElementImpl<OMElement>((OMElement)domNode); domNode.setUserData(SAAJ_NODE, saajSOAPElement, null); @@ -363,8 +321,8 @@ public abstract class SAAJNode<T extends } public final org.w3c.dom.Node removeChild(org.w3c.dom.Node oldChild) throws DOMException { - if (oldChild instanceof SAAJNode) { - oldChild = ((SAAJNode<?,?>)oldChild).getTarget(); + if (oldChild instanceof ProxyNode) { + oldChild = ((ProxyNode<?,?>)oldChild).getTarget(); } return target.removeChild(oldChild); } @@ -374,11 +332,11 @@ public abstract class SAAJNode<T extends } public final short getNodeType() { - return parentElement.getNodeType(); + return target.getNodeType(); } public final Document getOwnerDocument() { - return target.getOwnerDocument(); + return (Document)toSAAJNode(target.getOwnerDocument()); } public final String getLocalName() { @@ -422,10 +380,11 @@ public abstract class SAAJNode<T extends throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, "Wrong document"); } try { - if (child instanceof Text) { - return appendText((Text)child); - } else if (child instanceof Element) { + if (child instanceof Element) { return appendElement((Element)child); + } else { + target.appendChild(((ProxyNode<?,?>)child).target); + return child; } } catch (SOAPException e) { DOMException ex = @@ -433,24 +392,13 @@ public abstract class SAAJNode<T extends ex.initCause(e); throw ex; } - throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, - "An attempt was made to insert a node where it is not permitted."); - } - - protected Text appendText(Text child) throws SOAPException { - String text = child.getData(); - Text textNode = getOwnerDocument().createTextNode(text); - target.appendChild(textNode); - TextImplEx saajTextNode = new TextImplEx(text, (SOAPElement)this); - textNode.setUserData(SAAJ_NODE, saajTextNode, null); - return saajTextNode; } protected Element appendElement(Element child) throws SOAPException { String namespaceURI = child.getNamespaceURI(); String prefix = child.getPrefix(); - SOAPElementImpl<OMElement> childEle = new SOAPElementImpl<OMElement>((OMElement)child); + SOAPElementImpl<OMElement> childEle = (SOAPElementImpl<OMElement>)child; childEle.target.setUserData(SAAJ_NODE, childEle, null); if (namespaceURI != null && namespaceURI.trim().length() > 0) { @@ -469,4 +417,12 @@ public abstract class SAAJNode<T extends public final NamedNodeMap getAttributes() { return target.getAttributes(); } + + public final org.w3c.dom.Node getNextSibling() { + return toSAAJNode(target.getNextSibling()); + } + + public final org.w3c.dom.Node getPreviousSibling() { + return toSAAJNode(target.getPreviousSibling()); + } } Propchange: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java ------------------------------------------------------------------------------ svn:eol-style = native Added: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java?rev=1609578&view=auto ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java (added) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java Thu Jul 10 21:51:14 2014 @@ -0,0 +1,179 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.axis2.saaj; + +import org.apache.axiom.om.OMDocument; +import org.w3c.dom.Attr; +import org.w3c.dom.CDATASection; +import org.w3c.dom.Comment; +import org.w3c.dom.DOMConfiguration; +import org.w3c.dom.DOMException; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.DocumentFragment; +import org.w3c.dom.DocumentType; +import org.w3c.dom.Element; +import org.w3c.dom.EntityReference; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.ProcessingInstruction; +import org.w3c.dom.Text; + +public final class SAAJDocument extends ProxyNode<Document,OMDocument> implements Document { + public SAAJDocument(OMDocument target) { + super((Document)target, target); + } + + public String getValue() { + throw new UnsupportedOperationException(); + } + + public void setValue(String value) { + throw new UnsupportedOperationException(); + } + + public Node adoptNode(Node arg0) throws DOMException { + return target.adoptNode(arg0); + } + + public Attr createAttribute(String arg0) throws DOMException { + return target.createAttribute(arg0); + } + + public Attr createAttributeNS(String arg0, String arg1) throws DOMException { + return target.createAttributeNS(arg0, arg1); + } + + public CDATASection createCDATASection(String arg0) throws DOMException { + return (CDATASection)toSAAJNode(target.createCDATASection(arg0)); + } + + public Comment createComment(String arg0) { + return (Comment)toSAAJNode(target.createComment(arg0)); + } + + public DocumentFragment createDocumentFragment() { + return target.createDocumentFragment(); + } + + public Element createElement(String arg0) throws DOMException { + return (Element)toSAAJNode(target.createElement(arg0)); + } + + public Element createElementNS(String arg0, String arg1) throws DOMException { + return (Element)toSAAJNode(target.createElementNS(arg0, arg1)); + } + + public EntityReference createEntityReference(String arg0) throws DOMException { + return target.createEntityReference(arg0); + } + + public ProcessingInstruction createProcessingInstruction(String arg0, String arg1) + throws DOMException { + return target.createProcessingInstruction(arg0, arg1); + } + + public Text createTextNode(String arg0) { + return (Text)toSAAJNode(target.createTextNode(arg0)); + } + + public DocumentType getDoctype() { + return target.getDoctype(); + } + + public Element getDocumentElement() { + return target.getDocumentElement(); + } + + public String getDocumentURI() { + return target.getDocumentURI(); + } + + public DOMConfiguration getDomConfig() { + return target.getDomConfig(); + } + + public Element getElementById(String arg0) { + return target.getElementById(arg0); + } + + public NodeList getElementsByTagName(String arg0) { + return target.getElementsByTagName(arg0); + } + + public NodeList getElementsByTagNameNS(String arg0, String arg1) { + return target.getElementsByTagNameNS(arg0, arg1); + } + + public DOMImplementation getImplementation() { + return target.getImplementation(); + } + + public String getInputEncoding() { + return target.getInputEncoding(); + } + + public Node getParentNode() { + return target.getParentNode(); + } + + public boolean getStrictErrorChecking() { + return target.getStrictErrorChecking(); + } + + public String getXmlEncoding() { + return target.getXmlEncoding(); + } + + public boolean getXmlStandalone() { + return target.getXmlStandalone(); + } + + public String getXmlVersion() { + return target.getXmlVersion(); + } + + public Node importNode(Node arg0, boolean arg1) throws DOMException { + return target.importNode(arg0, arg1); + } + + public void normalizeDocument() { + target.normalizeDocument(); + } + + public Node renameNode(Node arg0, String arg1, String arg2) throws DOMException { + return target.renameNode(arg0, arg1, arg2); + } + + public void setDocumentURI(String arg0) { + target.setDocumentURI(arg0); + } + + public void setStrictErrorChecking(boolean arg0) { + target.setStrictErrorChecking(arg0); + } + + public void setXmlStandalone(boolean arg0) throws DOMException { + target.setXmlStandalone(arg0); + } + + public void setXmlVersion(String arg0) throws DOMException { + target.setXmlVersion(arg0); + } +} Propchange: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java Thu Jul 10 21:51:14 2014 @@ -64,7 +64,7 @@ public class SOAPBodyImpl extends SOAPEl throw new SOAPException("A SOAPFault has been already added to this SOAPBody"); } SOAPBodyElementImpl<OMElement> childEle = - new SOAPBodyElementImpl<OMElement>((OMElement)getOwnerDocument().createElement(localName)); + new SOAPBodyElementImpl<OMElement>((OMElement)target.getOwnerDocument().createElement(localName)); childEle.target.setUserData(SAAJ_NODE, childEle, null); target.appendChild(childEle.target); childEle.target.getParentNode().setUserData(SAAJ_NODE, this, null); @@ -80,7 +80,7 @@ public class SOAPBodyImpl extends SOAPEl } SOAPBodyElementImpl<OMElement> childEle = new SOAPBodyElementImpl<OMElement>( - (OMElement)getOwnerDocument().createElementNS(namespaceURI, + (OMElement)target.getOwnerDocument().createElementNS(namespaceURI, localName)); childEle.target.setUserData(SAAJ_NODE, childEle, null); childEle.omTarget.setNamespace(childEle.omTarget.declareNamespace(namespaceURI, prefix)); @@ -95,7 +95,7 @@ public class SOAPBodyImpl extends SOAPEl String namespaceURI = child.getNamespaceURI(); String prefix = child.getPrefix(); - SOAPBodyElementImpl<OMElement> childEle = new SOAPBodyElementImpl<OMElement>((OMElement)child); + SOAPBodyElementImpl<?> childEle = toSOAPBodyElement(child); childEle.target.setUserData(SAAJ_NODE, childEle, null); if (namespaceURI != null && namespaceURI.trim().length() > 0) { @@ -107,6 +107,14 @@ public class SOAPBodyImpl extends SOAPEl return childEle; } + private SOAPBodyElementImpl<?> toSOAPBodyElement(Element element) { + if (element instanceof SOAPBodyElementImpl) { + return (SOAPBodyElementImpl<?>)element; + } else { + return new SOAPBodyElementImpl<OMElement>(((SOAPElementImpl<?>)element).omTarget); + } + } + public SOAPElement addChildElement(SOAPElement soapElement) throws SOAPException { String namespaceURI = soapElement.getNamespaceURI(); String prefix = soapElement.getPrefix(); @@ -163,14 +171,14 @@ public class SOAPBodyImpl extends SOAPEl SOAPBodyElementImpl<OMElement> childEle; if (uri == null || "".equals(uri)) { childEle = new SOAPBodyElementImpl<OMElement>( - (OMElement)getOwnerDocument().createElement(localName)); + (OMElement)target.getOwnerDocument().createElement(localName)); } else if (prefix.length() == 0) { childEle = new SOAPBodyElementImpl<OMElement>( - (OMElement)getOwnerDocument().createElementNS(uri, + (OMElement)target.getOwnerDocument().createElementNS(uri, localName)); } else { childEle = new SOAPBodyElementImpl<OMElement>( - (OMElement)getOwnerDocument().createElementNS(uri, + (OMElement)target.getOwnerDocument().createElementNS(uri, prefix + ":" + localName)); } childEle.target.setUserData(SAAJ_NODE, childEle, null); @@ -399,11 +407,11 @@ public class SOAPBodyImpl extends SOAPEl } if (node instanceof org.w3c.dom.Text) { org.w3c.dom.Text domText = (org.w3c.dom.Text)node; - return new TextImplEx(domText.getData(), parent); + return new TextImplEx(domText.getData()); } if (node instanceof org.w3c.dom.Comment) { org.w3c.dom.Comment domText = (org.w3c.dom.Comment)node; - return new CommentImpl(domText.getData(), parent); + return new CommentImpl(domText.getData()); } Element domEle = ((Element)node); int indexOfColon = domEle.getTagName().indexOf(":"); @@ -496,14 +504,14 @@ public class SOAPBodyImpl extends SOAPEl SOAPBodyElementImpl<OMElement> childEle; if (qname.getNamespaceURI() == null || "".equals(qname.getNamespaceURI())) { childEle = new SOAPBodyElementImpl<OMElement>( - (OMElement)getOwnerDocument().createElement(qname.getLocalPart())); + (OMElement)target.getOwnerDocument().createElement(qname.getLocalPart())); }else if(null == qname.getPrefix() || "".equals(qname.getPrefix().trim())) { childEle = new SOAPBodyElementImpl<OMElement>( - (OMElement)getOwnerDocument().createElementNS(qname.getNamespaceURI(), + (OMElement)target.getOwnerDocument().createElementNS(qname.getNamespaceURI(), qname.getLocalPart())); }else { childEle = new SOAPBodyElementImpl<OMElement>( - (OMElement)getOwnerDocument().createElementNS(qname.getNamespaceURI(), + (OMElement)target.getOwnerDocument().createElementNS(qname.getNamespaceURI(), qname.getPrefix() + ":" + qname.getLocalPart())); } @@ -568,7 +576,7 @@ public class SOAPBodyImpl extends SOAPEl Collection childElements = new ArrayList(); while (childIter.hasNext()) { org.w3c.dom.Node domNode = (org.w3c.dom.Node)childIter.next(); - Node saajNode = toSAAJNode(domNode); + org.w3c.dom.Node saajNode = toSAAJNode(domNode); if (saajNode instanceof javax.xml.soap.Text) { childElements.add(saajNode); } else if (!(saajNode instanceof SOAPBodyElement)) { Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java Thu Jul 10 21:51:14 2014 @@ -23,8 +23,6 @@ import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.OMNode; -import org.apache.axiom.om.OMText; -import org.apache.axiom.om.impl.OMElementEx; import org.apache.axiom.soap.SOAP11Version; import org.apache.axiom.soap.SOAP12Version; import org.apache.axiom.soap.SOAPFactory; @@ -53,7 +51,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; -public class SOAPElementImpl<T extends OMElement> extends SAAJNode<Element,T> implements SOAPElement { +public class SOAPElementImpl<T extends OMElement> extends NodeImpl<Element,T> implements SOAPElement { private String encodingStyle; public SOAPElementImpl(T element) { @@ -102,7 +100,7 @@ public class SOAPElementImpl<T extends O } else { omTarget.declareNamespace(namespaceURI, prefix); childEle = - new SOAPElementImpl<OMElement>((OMElement)getOwnerDocument().createElementNS(namespaceURI, + new SOAPElementImpl<OMElement>((OMElement)target.getOwnerDocument().createElementNS(namespaceURI, localName)); } @@ -138,9 +136,8 @@ public class SOAPElementImpl<T extends O if (prefix == null) { prefix = ""; } - SOAPElementImpl<OMElement> childEle = - new SOAPElementImpl<OMElement>((OMElement)getOwnerDocument(). - createElementNS(namespaceURI, prefix.length() == 0 ? localName : prefix + ":" + localName)); + SOAPElementImpl<OMElement> childEle = (SOAPElementImpl<OMElement>)getOwnerDocument(). + createElementNS(namespaceURI, prefix.length() == 0 ? localName : prefix + ":" + localName); childEle.target.setUserData(SAAJ_NODE, childEle, null); childEle.omTarget.setNamespace(prefix.length() == 0 @@ -204,9 +201,7 @@ public class SOAPElementImpl<T extends O //Therefore create a text node and add it //TODO: May need to address the situation where the prev sibling of the textnode itself is a textnode Text textNode = getOwnerDocument().createTextNode(text); - target.appendChild(textNode); - TextImplEx saajTextNode = new TextImplEx((OMText)textNode, this); - textNode.setUserData(SAAJ_NODE, saajTextNode, null); + appendChild(textNode); return this; } @@ -655,7 +650,7 @@ public class SOAPElementImpl<T extends O */ public SOAPElement getParentElement() { if (this.parentElement == null) { - javax.xml.soap.Node parentNode = toSAAJNode(target.getParentNode()); + Node parentNode = toSAAJNode(target.getParentNode()); if (parentNode instanceof SOAPElement) { this.parentElement = (SOAPElement) parentNode; } @@ -665,7 +660,7 @@ public class SOAPElementImpl<T extends O public void setParentElement(SOAPElement parent) throws SOAPException { this.parentElement = parent; - ((OMElementEx)this.omTarget).setParent(((SOAPElementImpl<? extends OMElement>)parent).omTarget); + (((SOAPElementImpl<? extends OMElement>)parent).omTarget).addChild(this.omTarget); } /** @@ -709,15 +704,6 @@ public class SOAPElementImpl<T extends O return parentNode; } - /** dom Node method */ - public org.w3c.dom.Node getNextSibling() { - return toSAAJNode(target.getNextSibling()); - } - - public Node getPreviousSibling() { - return toSAAJNode(target.getPreviousSibling()); - } - /** * If this is a Text node then this method will set its value, otherwise it sets the value of * the immediate (Text) child of this node. The value of the immediate child of this node can be Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java Thu Jul 10 21:51:14 2014 @@ -755,7 +755,7 @@ public class SOAPFaultImpl extends SOAPB Collection childElements = new ArrayList(); while (childIter.hasNext()) { org.w3c.dom.Node domNode = (org.w3c.dom.Node)childIter.next(); - Node saajNode = toSAAJNode(domNode); + org.w3c.dom.Node saajNode = toSAAJNode(domNode); if (!(saajNode instanceof SOAPFaultElement)) { // silently replace node, as per saaj 1.2 spec SOAPFaultElement bodyEle = new SOAPFaultElementImpl<OMElement>((OMElement)domNode); Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java Thu Jul 10 21:51:14 2014 @@ -349,7 +349,7 @@ public class SOAPHeaderImpl extends SOAP Collection childElements = new ArrayList(); while (childIter.hasNext()) { org.w3c.dom.Node domNode = (org.w3c.dom.Node)childIter.next(); - Node saajNode = toSAAJNode(domNode); + org.w3c.dom.Node saajNode = toSAAJNode(domNode); if (saajNode instanceof javax.xml.soap.Text) { childElements.add(saajNode); } else if (!(saajNode instanceof SOAPHeaderElement)) { Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java Thu Jul 10 21:51:14 2014 @@ -1192,7 +1192,7 @@ public class SOAPPartImpl extends SOAPPa throw new IllegalStateException("Cannot set value of SOAPPart."); } - javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) { - return SAAJNode.toSAAJNode(domNode, this); + Node toSAAJNode(org.w3c.dom.Node domNode) { + return ProxyNode.toSAAJNode(domNode, this); } } Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java Thu Jul 10 21:51:14 2014 @@ -20,38 +20,18 @@ package org.apache.axis2.saaj; import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.om.OMText; +import org.apache.axiom.om.OMNode; import org.w3c.dom.DOMException; -import javax.xml.soap.SOAPElement; import javax.xml.soap.Text; -public class TextImplEx extends SAAJNode<org.w3c.dom.Text,OMText> implements Text { - private org.w3c.dom.Node previousSibling; - private org.w3c.dom.Node nextSibling; - - public TextImplEx(String data, SOAPElement parent) { - this(OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM).getOMFactory().createOMText(data), parent); - } - - public TextImplEx(OMText textNode, SOAPElement parent) { - super((org.w3c.dom.Text)textNode, textNode); - this.parentElement = parent; - } - - public TextImplEx(String data, SOAPElement parent, - org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) { - this(data, parent); - this.previousSibling = prevSibling; - this.nextSibling = nextSibling; - } - - public void setNextSibling(org.w3c.dom.Node nextSibling) { - this.nextSibling = nextSibling; +public class TextImplEx extends NodeImpl<org.w3c.dom.CharacterData,OMNode> implements Text { + public TextImplEx(String data) { + this(OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM).getOMFactory().createOMText(data)); } - public void setPreviousSibling(org.w3c.dom.Node previousSibling) { - this.previousSibling = previousSibling; + public TextImplEx(OMNode textNode) { + super((org.w3c.dom.CharacterData)textNode, textNode); } /** @@ -61,7 +41,7 @@ public class TextImplEx extends SAAJNode * otherwise */ public boolean isComment() { - String value = omTarget.getText(); + String value = target.getData(); return value.startsWith("<!--") && value.endsWith("-->"); } @@ -80,7 +60,7 @@ public class TextImplEx extends SAAJNode * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly. */ public org.w3c.dom.Text splitText(int offset) throws DOMException { - return target.splitText(offset); + return ((Text)target).splitText(offset); } public boolean isElementContentWhitespace() { @@ -235,16 +215,6 @@ public class TextImplEx extends SAAJNode return getValue(); } - - public org.w3c.dom.Node getNextSibling() { - return toSAAJNode(nextSibling); - } - - - public org.w3c.dom.Node getPreviousSibling() { - return toSAAJNode(previousSibling); - } - public int getLength() { return target.getLength(); } Copied: axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java (from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java) URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java?p2=axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java&p1=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java&r1=1608843&r2=1609578&rev=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java Thu Jul 10 21:51:14 2014 @@ -18,22 +18,13 @@ */ package org.apache.axis2.saaj; -import javax.xml.soap.SOAPElement; +import junit.framework.TestCase; +import junit.framework.TestSuite; -import org.w3c.dom.Comment; +import org.apache.axiom.ts.saaj.SAAJTestSuiteBuilder; -public class CommentImpl extends TextImplEx implements Comment { - - public CommentImpl(String data, SOAPElement parent) { - super(data, parent); - } - - public CommentImpl(String data, SOAPElement parent, - org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) { - super(data, parent, prevSibling, nextSibling); - } - - public boolean isComment() { - return true; +public class ImplementationTest extends TestCase { + public static TestSuite suite() throws Exception { + return new SAAJTestSuiteBuilder(new SAAJMetaFactoryImpl()).build(); } } Modified: axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java?rev=1609578&r1=1609577&r2=1609578&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java Thu Jul 10 21:51:14 2014 @@ -196,50 +196,6 @@ public class SOAPPartTest extends Assert assertTrue(node == null); } - /** - * Check parent processing of SOAPMessage - */ - // TODO: check why this fails with Sun's SAAJ implementation - @Test - public void test_parentAccess2() throws Exception { - - MessageFactory mf = MessageFactory.newInstance(); - SOAPMessage m = mf.createMessage(); - SOAPPart sp = m.getSOAPPart(); - SOAPEnvelope se = sp.getEnvelope(); - Node node = se.getParentNode(); - assertTrue(node == sp); - node = node.getParentNode(); - assertTrue(node == null); - - SOAPElement e = se.getParentElement(); - assertTrue(node == null); - } - - /** - * Check parent processing of SOAPMessage - */ - @Validated @Test - public void test_parentAccess3() throws Exception { - - SOAP11Factory axiomSF = new SOAP11Factory(); - org.apache.axiom.soap.SOAPEnvelope axiomSE = axiomSF.createSOAPEnvelope(); - org.apache.axiom.soap.SOAPMessage axiomSM = axiomSF.createSOAPMessage(); - axiomSM.setSOAPEnvelope(axiomSE); - - SOAPEnvelopeImpl se = new SOAPEnvelopeImpl(axiomSE); - SOAPMessageImpl sm = new SOAPMessageImpl(se); - SOAPPartImpl sp = new SOAPPartImpl(sm, se); - - Node node = se.getParentNode(); - assertTrue(node == sp); - node = node.getParentNode(); - assertTrue(node == null); - - SOAPElement e = se.getParentElement(); - assertTrue(node == null); - } - // TODO: check why this fails with Sun's SAAJ implementation @Test public void testNodeTypes() throws Exception {