You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by jo...@apache.org on 2005/02/18 14:03:58 UTC
cvs commit: ws-axis/java/test/saaj TestEnvelope.java
jongjinchoi 2005/02/18 05:03:58
Modified: java/src/org/apache/axis/message SOAPEnvelope.java
SOAPHandler.java MessageElement.java
java/test/message TestMessageElement.java
java/test/saaj TestEnvelope.java
Log:
Fix for AXIS-1817, 1823.
- SOAPEnvelope#outputImpl() is modified so that envelope's each children's output or outputImpl methods is called in order. (What is the trailers in SOAPEnvelope?)
- MessageElement#getValue() :
TextSerializationContext is not sufficient for getting the exact text node.
So, comment it.
- MessageElement#getValue() looks for the first child text node among its children. (not to check if just first node is text node)
- SOAPEnvelope's getValue() is removed. MessageElement#getValue() is used instead.
- SOAPHandler :
- Add text child to current deserialing element (myElemetn) in onStartChild() for mixed contents.
- To avoid appending text child for ignorable white spaces, the stripped string's length is checked, but it is necessary to append the original unstripped text child to keep its non-igrnorable white spaces.
- test/message/TestMessageElement.java
fixed invalid test case for mixed contents according to SAAJ-spec and SUN's RI.
- test/saaj/TestEnvelope.java
added test case for checking appended text node is position as expected (after soapbody)
Revision Changes Path
1.106 +15 -23 ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java
Index: SOAPEnvelope.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -r1.105 -r1.106
--- SOAPEnvelope.java 22 Nov 2004 17:57:08 -0000 1.105
+++ SOAPEnvelope.java 18 Feb 2005 13:03:57 -0000 1.106
@@ -465,26 +465,23 @@
context.startElement(new QName(soapConstants.getEnvelopeURI(),
Constants.ELEM_ENVELOPE), attributes);
- // Output non-SOAPHeader and non-SOAPBody stuff.
+
+ // Output <SOAP-ENV:Envelope>'s each child as it appears.
Iterator i = getChildElements();
- while (i.hasNext()) {
- NodeImpl element = (NodeImpl)i.next();
- if(element instanceof SOAPHeader ||
- element instanceof SOAPBody)
- continue;
- element.output(context);
- }
-
- // Output headers
- if (header != null) {
- header.outputImpl(context);
- }
-
- // Output body
- if (body != null) {
- body.outputImpl(context);
+ while (i.hasNext()) {
+ NodeImpl node = (NodeImpl)i.next();
+
+ if (node instanceof SOAPHeader) {
+ header.outputImpl(context);
+ } else if (node instanceof SOAPBody) {
+ body.outputImpl(context);
+ } else if (node instanceof MessageElement) {
+ ((MessageElement)node).output(context);
+ } else {
+ node.output(context);
+ }
}
-
+
// Output trailers
enumeration = trailers.elements();
while (enumeration.hasMoreElements()) {
@@ -675,9 +672,4 @@
setOwnerDocumentForChildren(node.children, sp); // recursively
}
}
-
- public String getValue() {
- return getValueDOM();
- }
-
}
1.20 +26 -12 ws-axis/java/src/org/apache/axis/message/SOAPHandler.java
Index: SOAPHandler.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPHandler.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- SOAPHandler.java 15 Nov 2004 19:03:01 -0000 1.19
+++ SOAPHandler.java 18 Feb 2005 13:03:58 -0000 1.20
@@ -109,18 +109,7 @@
throws SAXException
{
if (myElement != null) {
-
- if (val != null && val.size() > 0) {
- String s = StringUtils.strip(val.toString());
- val.reset();
- if(s.length()>0){
- try {
- myElement.addTextNode(s);
- } catch (SOAPException e) {
- throw new SAXException(e);
- }
- }
- }
+ addTextNode();
if (myElements != null) {
myElements[myIndex] = myElement;
@@ -136,9 +125,34 @@
DeserializationContext context)
throws SAXException
{
+ addTextNode();
SOAPHandler handler = new SOAPHandler();
return handler;
}
+
+ private void addTextNode() throws SAXException {
+ if (myElement != null) {
+ if (val != null && val.size() > 0) {
+ String s = StringUtils.strip(val.toString());
+ val.reset();
+
+ // we need to check the length of STRIPPED string
+ // to avoid appending ignorable white spaces as
+ // message elmenet's child.
+ // (SOAPHeader and others does not accept text children...
+ // but in SAAJ 1.2's DOM view, this could be incorrect.
+ // we need to keep the ignorable white spaces later)
+ if(s.length()>0){
+ try {
+ // add unstripped string as text child.
+ myElement.addTextNode(s);
+ } catch (SOAPException e) {
+ throw new SAXException(e);
+ }
+ }
+ }
+ }
+ }
public void onEndChild(String namespace, String localName,
DeserializationContext context)
1.195 +6 -3 ws-axis/java/src/org/apache/axis/message/MessageElement.java
Index: MessageElement.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/MessageElement.java,v
retrieving revision 1.194
retrieving revision 1.195
diff -u -r1.194 -r1.195
--- MessageElement.java 8 Feb 2005 18:44:36 -0000 1.194
+++ MessageElement.java 18 Feb 2005 13:03:58 -0000 1.195
@@ -2055,6 +2055,7 @@
* @see javax.xml.soap.Node#getValue() ;
*/
public String getValue() {
+ /*--- Fix for AXIS-1817
if ((recorder != null) && (!_isDirty)) {
StringWriter writer = new StringWriter();
TextSerializationContext outputContext =
@@ -2070,6 +2071,7 @@
String value = writer.toString();
return (value.length() == 0) ? null : value;
}
+ ---*/
if (textRep != null) {
// weird case: error?
@@ -2080,9 +2082,10 @@
return getValueDOM();
}
- if (children != null && !children.isEmpty()) {
- if (children.get(0) instanceof org.apache.axis.message.Text) {
- return ((org.apache.axis.message.Text)children.get(0)).getNodeValue();
+ for (Iterator i = getChildElements(); i.hasNext(); ) {
+ NodeImpl n = (NodeImpl) i.next();
+ if (n instanceof Text) {
+ return ((Text)n).getNodeValue();
}
}
1.19 +10 -2 ws-axis/java/test/message/TestMessageElement.java
Index: TestMessageElement.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/message/TestMessageElement.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- TestMessageElement.java 11 Nov 2004 00:29:26 -0000 1.18
+++ TestMessageElement.java 18 Feb 2005 13:03:58 -0000 1.19
@@ -392,6 +392,11 @@
assertEquals("FooBar", getNodeValueContext(data));
assertEquals("FooBar", getNodeValueDOM(data));
+
+ data = "<anElement xmlns:ns1=\"aNamespace\">A>B</anElement>";
+
+ assertEquals("A>B", getNodeValueContext(data));
+ assertEquals("A>B", getNodeValueDOM(data));
data = "<anElement xmlns:ns1=\"aNamespace\"><bElement>FooBar</bElement></anElement>";
@@ -400,8 +405,11 @@
data = "<anElement xmlns:ns1=\"aNamespace\"><bElement>FooBar</bElement>Mixed</anElement>";
- assertTrue(getNodeValueContext(data) == null);
- assertTrue(getNodeValueDOM(data) == null);
+ // SAAJ 1.2 requires "Mixed" for this case.
+ assertEquals("Mixed", getNodeValueContext(data));
+ assertEquals("Mixed", getNodeValueDOM(data));
+// assertTrue(getNodeValueContext(data) == null);
+// assertTrue(getNodeValueDOM(data) == null);
data = "<anElement xmlns:ns1=\"aNamespace\">Foo<bElement>FooBar</bElement>Mixed</anElement>";
1.9 +38 -0 ws-axis/java/test/saaj/TestEnvelope.java
Index: TestEnvelope.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/saaj/TestEnvelope.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- TestEnvelope.java 2 Jul 2004 13:32:41 -0000 1.8
+++ TestEnvelope.java 18 Feb 2005 13:03:58 -0000 1.9
@@ -7,8 +7,10 @@
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
+import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
@@ -19,7 +21,9 @@
import javax.xml.soap.DetailEntry;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.util.Iterator;
+import junit.framework.AssertionFailedError;
public class TestEnvelope extends junit.framework.TestCase {
@@ -224,6 +228,40 @@
assertTrue(t.isComment());
}
+ public void testText4() throws SOAPException, IOException {
+ MessageFactory mf = MessageFactory.newInstance();
+ SOAPMessage smsg =
+ mf.createMessage(new MimeHeaders(), new ByteArrayInputStream(xmlString.getBytes()));
+
+ // Make some change to the message
+ SOAPPart sp = smsg.getSOAPPart();
+ SOAPEnvelope envelope = sp.getEnvelope();
+ envelope.addTextNode("<!-- This is a comment -->");
+
+ boolean passbody = false;
+ for (Iterator i = envelope.getChildElements(); i.hasNext(); ) {
+ Node n = (Node) i.next();
+ if (n instanceof SOAPElement) {
+ SOAPElement se = (SOAPElement) n;
+ System.out.println("soap element = " + se.getNodeName());
+ if (se.getNamespaceURI().equals(SOAPConstants.URI_NS_SOAP_ENVELOPE)
+ && se.getLocalName().equals("Body")) {
+ passbody = true;
+ }
+ }
+
+ if (n instanceof Text) {
+ Text t = (Text)n;
+ System.out.println("text = " + t.getValue());
+ if (t.getValue().equals("<!-- This is a comment -->")) {
+ assertEquals(true, passbody);
+ return;
+ }
+ }
+ }
+ throw new AssertionFailedError("Text is not added to expected position.");
+ }
+
private int getIteratorCount(java.util.Iterator i) {
int count = 0;
while (i.hasNext()) {
Re: cvs commit: ws-axis/java/test/saaj TestEnvelope.java
Posted by Davanum Srinivas <da...@gmail.com>.
Please mark the issues as "Resolved"
thanks,
-- dims
On 18 Feb 2005 13:03:58 -0000, jongjinchoi@apache.org
<jo...@apache.org> wrote:
> jongjinchoi 2005/02/18 05:03:58
>
> Modified: java/src/org/apache/axis/message SOAPEnvelope.java
> SOAPHandler.java MessageElement.java
> java/test/message TestMessageElement.java
> java/test/saaj TestEnvelope.java
> Log:
> Fix for AXIS-1817, 1823.
>
> - SOAPEnvelope#outputImpl() is modified so that envelope's each children's output or outputImpl methods is called in order. (What is the trailers in SOAPEnvelope?)
>
> - MessageElement#getValue() :
> TextSerializationContext is not sufficient for getting the exact text node.
> So, comment it.
>
> - MessageElement#getValue() looks for the first child text node among its children. (not to check if just first node is text node)
>
> - SOAPEnvelope's getValue() is removed. MessageElement#getValue() is used instead.
>
> - SOAPHandler :
> - Add text child to current deserialing element (myElemetn) in onStartChild() for mixed contents.
> - To avoid appending text child for ignorable white spaces, the stripped string's length is checked, but it is necessary to append the original unstripped text child to keep its non-igrnorable white spaces.
>
> - test/message/TestMessageElement.java
> fixed invalid test case for mixed contents according to SAAJ-spec and SUN's RI.
>
> - test/saaj/TestEnvelope.java
> added test case for checking appended text node is position as expected (after soapbody)
>
> Revision Changes Path
> 1.106 +15 -23 ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java
>
> Index: SOAPEnvelope.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java,v
> retrieving revision 1.105
> retrieving revision 1.106
> diff -u -r1.105 -r1.106
> --- SOAPEnvelope.java 22 Nov 2004 17:57:08 -0000 1.105
> +++ SOAPEnvelope.java 18 Feb 2005 13:03:57 -0000 1.106
> @@ -465,26 +465,23 @@
> context.startElement(new QName(soapConstants.getEnvelopeURI(),
> Constants.ELEM_ENVELOPE), attributes);
>
> - // Output non-SOAPHeader and non-SOAPBody stuff.
> +
> + // Output <SOAP-ENV:Envelope>'s each child as it appears.
> Iterator i = getChildElements();
> - while (i.hasNext()) {
> - NodeImpl element = (NodeImpl)i.next();
> - if(element instanceof SOAPHeader ||
> - element instanceof SOAPBody)
> - continue;
> - element.output(context);
> - }
> -
> - // Output headers
> - if (header != null) {
> - header.outputImpl(context);
> - }
> -
> - // Output body
> - if (body != null) {
> - body.outputImpl(context);
> + while (i.hasNext()) {
> + NodeImpl node = (NodeImpl)i.next();
> +
> + if (node instanceof SOAPHeader) {
> + header.outputImpl(context);
> + } else if (node instanceof SOAPBody) {
> + body.outputImpl(context);
> + } else if (node instanceof MessageElement) {
> + ((MessageElement)node).output(context);
> + } else {
> + node.output(context);
> + }
> }
> -
> +
> // Output trailers
> enumeration = trailers.elements();
> while (enumeration.hasMoreElements()) {
> @@ -675,9 +672,4 @@
> setOwnerDocumentForChildren(node.children, sp); // recursively
> }
> }
> -
> - public String getValue() {
> - return getValueDOM();
> - }
> -
> }
>
> 1.20 +26 -12 ws-axis/java/src/org/apache/axis/message/SOAPHandler.java
>
> Index: SOAPHandler.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPHandler.java,v
> retrieving revision 1.19
> retrieving revision 1.20
> diff -u -r1.19 -r1.20
> --- SOAPHandler.java 15 Nov 2004 19:03:01 -0000 1.19
> +++ SOAPHandler.java 18 Feb 2005 13:03:58 -0000 1.20
> @@ -109,18 +109,7 @@
> throws SAXException
> {
> if (myElement != null) {
> -
> - if (val != null && val.size() > 0) {
> - String s = StringUtils.strip(val.toString());
> - val.reset();
> - if(s.length()>0){
> - try {
> - myElement.addTextNode(s);
> - } catch (SOAPException e) {
> - throw new SAXException(e);
> - }
> - }
> - }
> + addTextNode();
>
> if (myElements != null) {
> myElements[myIndex] = myElement;
> @@ -136,9 +125,34 @@
> DeserializationContext context)
> throws SAXException
> {
> + addTextNode();
> SOAPHandler handler = new SOAPHandler();
> return handler;
> }
> +
> + private void addTextNode() throws SAXException {
> + if (myElement != null) {
> + if (val != null && val.size() > 0) {
> + String s = StringUtils.strip(val.toString());
> + val.reset();
> +
> + // we need to check the length of STRIPPED string
> + // to avoid appending ignorable white spaces as
> + // message elmenet's child.
> + // (SOAPHeader and others does not accept text children...
> + // but in SAAJ 1.2's DOM view, this could be incorrect.
> + // we need to keep the ignorable white spaces later)
> + if(s.length()>0){
> + try {
> + // add unstripped string as text child.
> + myElement.addTextNode(s);
> + } catch (SOAPException e) {
> + throw new SAXException(e);
> + }
> + }
> + }
> + }
> + }
>
> public void onEndChild(String namespace, String localName,
> DeserializationContext context)
>
> 1.195 +6 -3 ws-axis/java/src/org/apache/axis/message/MessageElement.java
>
> Index: MessageElement.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/MessageElement.java,v
> retrieving revision 1.194
> retrieving revision 1.195
> diff -u -r1.194 -r1.195
> --- MessageElement.java 8 Feb 2005 18:44:36 -0000 1.194
> +++ MessageElement.java 18 Feb 2005 13:03:58 -0000 1.195
> @@ -2055,6 +2055,7 @@
> * @see javax.xml.soap.Node#getValue() ;
> */
> public String getValue() {
> + /*--- Fix for AXIS-1817
> if ((recorder != null) && (!_isDirty)) {
> StringWriter writer = new StringWriter();
> TextSerializationContext outputContext =
> @@ -2070,6 +2071,7 @@
> String value = writer.toString();
> return (value.length() == 0) ? null : value;
> }
> + ---*/
>
> if (textRep != null) {
> // weird case: error?
> @@ -2080,9 +2082,10 @@
> return getValueDOM();
> }
>
> - if (children != null && !children.isEmpty()) {
> - if (children.get(0) instanceof org.apache.axis.message.Text) {
> - return ((org.apache.axis.message.Text)children.get(0)).getNodeValue();
> + for (Iterator i = getChildElements(); i.hasNext(); ) {
> + NodeImpl n = (NodeImpl) i.next();
> + if (n instanceof Text) {
> + return ((Text)n).getNodeValue();
> }
> }
>
> 1.19 +10 -2 ws-axis/java/test/message/TestMessageElement.java
>
> Index: TestMessageElement.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/test/message/TestMessageElement.java,v
> retrieving revision 1.18
> retrieving revision 1.19
> diff -u -r1.18 -r1.19
> --- TestMessageElement.java 11 Nov 2004 00:29:26 -0000 1.18
> +++ TestMessageElement.java 18 Feb 2005 13:03:58 -0000 1.19
> @@ -392,6 +392,11 @@
>
> assertEquals("FooBar", getNodeValueContext(data));
> assertEquals("FooBar", getNodeValueDOM(data));
> +
> + data = "<anElement xmlns:ns1=\"aNamespace\">A>B</anElement>";
> +
> + assertEquals("A>B", getNodeValueContext(data));
> + assertEquals("A>B", getNodeValueDOM(data));
>
> data = "<anElement xmlns:ns1=\"aNamespace\"><bElement>FooBar</bElement></anElement>";
>
> @@ -400,8 +405,11 @@
>
> data = "<anElement xmlns:ns1=\"aNamespace\"><bElement>FooBar</bElement>Mixed</anElement>";
>
> - assertTrue(getNodeValueContext(data) == null);
> - assertTrue(getNodeValueDOM(data) == null);
> + // SAAJ 1.2 requires "Mixed" for this case.
> + assertEquals("Mixed", getNodeValueContext(data));
> + assertEquals("Mixed", getNodeValueDOM(data));
> +// assertTrue(getNodeValueContext(data) == null);
> +// assertTrue(getNodeValueDOM(data) == null);
>
> data = "<anElement xmlns:ns1=\"aNamespace\">Foo<bElement>FooBar</bElement>Mixed</anElement>";
>
> 1.9 +38 -0 ws-axis/java/test/saaj/TestEnvelope.java
>
> Index: TestEnvelope.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/test/saaj/TestEnvelope.java,v
> retrieving revision 1.8
> retrieving revision 1.9
> diff -u -r1.8 -r1.9
> --- TestEnvelope.java 2 Jul 2004 13:32:41 -0000 1.8
> +++ TestEnvelope.java 18 Feb 2005 13:03:58 -0000 1.9
> @@ -7,8 +7,10 @@
> import javax.xml.soap.SOAPBody;
> import javax.xml.soap.SOAPConnection;
> import javax.xml.soap.SOAPConnectionFactory;
> +import javax.xml.soap.SOAPConstants;
> import javax.xml.soap.SOAPElement;
> import javax.xml.soap.SOAPEnvelope;
> +import javax.xml.soap.SOAPException;
> import javax.xml.soap.SOAPFault;
> import javax.xml.soap.SOAPHeader;
> import javax.xml.soap.SOAPHeaderElement;
> @@ -19,7 +21,9 @@
> import javax.xml.soap.DetailEntry;
> import java.io.ByteArrayInputStream;
> import java.io.ByteArrayOutputStream;
> +import java.io.IOException;
> import java.util.Iterator;
> +import junit.framework.AssertionFailedError;
>
> public class TestEnvelope extends junit.framework.TestCase {
>
> @@ -224,6 +228,40 @@
> assertTrue(t.isComment());
> }
>
> + public void testText4() throws SOAPException, IOException {
> + MessageFactory mf = MessageFactory.newInstance();
> + SOAPMessage smsg =
> + mf.createMessage(new MimeHeaders(), new ByteArrayInputStream(xmlString.getBytes()));
> +
> + // Make some change to the message
> + SOAPPart sp = smsg.getSOAPPart();
> + SOAPEnvelope envelope = sp.getEnvelope();
> + envelope.addTextNode("<!-- This is a comment -->");
> +
> + boolean passbody = false;
> + for (Iterator i = envelope.getChildElements(); i.hasNext(); ) {
> + Node n = (Node) i.next();
> + if (n instanceof SOAPElement) {
> + SOAPElement se = (SOAPElement) n;
> + System.out.println("soap element = " + se.getNodeName());
> + if (se.getNamespaceURI().equals(SOAPConstants.URI_NS_SOAP_ENVELOPE)
> + && se.getLocalName().equals("Body")) {
> + passbody = true;
> + }
> + }
> +
> + if (n instanceof Text) {
> + Text t = (Text)n;
> + System.out.println("text = " + t.getValue());
> + if (t.getValue().equals("<!-- This is a comment -->")) {
> + assertEquals(true, passbody);
> + return;
> + }
> + }
> + }
> + throw new AssertionFailedError("Text is not added to expected position.");
> + }
> +
> private int getIteratorCount(java.util.Iterator i) {
> int count = 0;
> while (i.hasNext()) {
>
>
--
Davanum Srinivas - http://webservices.apache.org/~dims/
Re: cvs commit: ws-axis/java/test/saaj TestEnvelope.java
Posted by Davanum Srinivas <da...@gmail.com>.
Please mark the issues as "Resolved"
thanks,
-- dims
On 18 Feb 2005 13:03:58 -0000, jongjinchoi@apache.org
<jo...@apache.org> wrote:
> jongjinchoi 2005/02/18 05:03:58
>
> Modified: java/src/org/apache/axis/message SOAPEnvelope.java
> SOAPHandler.java MessageElement.java
> java/test/message TestMessageElement.java
> java/test/saaj TestEnvelope.java
> Log:
> Fix for AXIS-1817, 1823.
>
> - SOAPEnvelope#outputImpl() is modified so that envelope's each children's output or outputImpl methods is called in order. (What is the trailers in SOAPEnvelope?)
>
> - MessageElement#getValue() :
> TextSerializationContext is not sufficient for getting the exact text node.
> So, comment it.
>
> - MessageElement#getValue() looks for the first child text node among its children. (not to check if just first node is text node)
>
> - SOAPEnvelope's getValue() is removed. MessageElement#getValue() is used instead.
>
> - SOAPHandler :
> - Add text child to current deserialing element (myElemetn) in onStartChild() for mixed contents.
> - To avoid appending text child for ignorable white spaces, the stripped string's length is checked, but it is necessary to append the original unstripped text child to keep its non-igrnorable white spaces.
>
> - test/message/TestMessageElement.java
> fixed invalid test case for mixed contents according to SAAJ-spec and SUN's RI.
>
> - test/saaj/TestEnvelope.java
> added test case for checking appended text node is position as expected (after soapbody)
>
> Revision Changes Path
> 1.106 +15 -23 ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java
>
> Index: SOAPEnvelope.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java,v
> retrieving revision 1.105
> retrieving revision 1.106
> diff -u -r1.105 -r1.106
> --- SOAPEnvelope.java 22 Nov 2004 17:57:08 -0000 1.105
> +++ SOAPEnvelope.java 18 Feb 2005 13:03:57 -0000 1.106
> @@ -465,26 +465,23 @@
> context.startElement(new QName(soapConstants.getEnvelopeURI(),
> Constants.ELEM_ENVELOPE), attributes);
>
> - // Output non-SOAPHeader and non-SOAPBody stuff.
> +
> + // Output <SOAP-ENV:Envelope>'s each child as it appears.
> Iterator i = getChildElements();
> - while (i.hasNext()) {
> - NodeImpl element = (NodeImpl)i.next();
> - if(element instanceof SOAPHeader ||
> - element instanceof SOAPBody)
> - continue;
> - element.output(context);
> - }
> -
> - // Output headers
> - if (header != null) {
> - header.outputImpl(context);
> - }
> -
> - // Output body
> - if (body != null) {
> - body.outputImpl(context);
> + while (i.hasNext()) {
> + NodeImpl node = (NodeImpl)i.next();
> +
> + if (node instanceof SOAPHeader) {
> + header.outputImpl(context);
> + } else if (node instanceof SOAPBody) {
> + body.outputImpl(context);
> + } else if (node instanceof MessageElement) {
> + ((MessageElement)node).output(context);
> + } else {
> + node.output(context);
> + }
> }
> -
> +
> // Output trailers
> enumeration = trailers.elements();
> while (enumeration.hasMoreElements()) {
> @@ -675,9 +672,4 @@
> setOwnerDocumentForChildren(node.children, sp); // recursively
> }
> }
> -
> - public String getValue() {
> - return getValueDOM();
> - }
> -
> }
>
> 1.20 +26 -12 ws-axis/java/src/org/apache/axis/message/SOAPHandler.java
>
> Index: SOAPHandler.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPHandler.java,v
> retrieving revision 1.19
> retrieving revision 1.20
> diff -u -r1.19 -r1.20
> --- SOAPHandler.java 15 Nov 2004 19:03:01 -0000 1.19
> +++ SOAPHandler.java 18 Feb 2005 13:03:58 -0000 1.20
> @@ -109,18 +109,7 @@
> throws SAXException
> {
> if (myElement != null) {
> -
> - if (val != null && val.size() > 0) {
> - String s = StringUtils.strip(val.toString());
> - val.reset();
> - if(s.length()>0){
> - try {
> - myElement.addTextNode(s);
> - } catch (SOAPException e) {
> - throw new SAXException(e);
> - }
> - }
> - }
> + addTextNode();
>
> if (myElements != null) {
> myElements[myIndex] = myElement;
> @@ -136,9 +125,34 @@
> DeserializationContext context)
> throws SAXException
> {
> + addTextNode();
> SOAPHandler handler = new SOAPHandler();
> return handler;
> }
> +
> + private void addTextNode() throws SAXException {
> + if (myElement != null) {
> + if (val != null && val.size() > 0) {
> + String s = StringUtils.strip(val.toString());
> + val.reset();
> +
> + // we need to check the length of STRIPPED string
> + // to avoid appending ignorable white spaces as
> + // message elmenet's child.
> + // (SOAPHeader and others does not accept text children...
> + // but in SAAJ 1.2's DOM view, this could be incorrect.
> + // we need to keep the ignorable white spaces later)
> + if(s.length()>0){
> + try {
> + // add unstripped string as text child.
> + myElement.addTextNode(s);
> + } catch (SOAPException e) {
> + throw new SAXException(e);
> + }
> + }
> + }
> + }
> + }
>
> public void onEndChild(String namespace, String localName,
> DeserializationContext context)
>
> 1.195 +6 -3 ws-axis/java/src/org/apache/axis/message/MessageElement.java
>
> Index: MessageElement.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/MessageElement.java,v
> retrieving revision 1.194
> retrieving revision 1.195
> diff -u -r1.194 -r1.195
> --- MessageElement.java 8 Feb 2005 18:44:36 -0000 1.194
> +++ MessageElement.java 18 Feb 2005 13:03:58 -0000 1.195
> @@ -2055,6 +2055,7 @@
> * @see javax.xml.soap.Node#getValue() ;
> */
> public String getValue() {
> + /*--- Fix for AXIS-1817
> if ((recorder != null) && (!_isDirty)) {
> StringWriter writer = new StringWriter();
> TextSerializationContext outputContext =
> @@ -2070,6 +2071,7 @@
> String value = writer.toString();
> return (value.length() == 0) ? null : value;
> }
> + ---*/
>
> if (textRep != null) {
> // weird case: error?
> @@ -2080,9 +2082,10 @@
> return getValueDOM();
> }
>
> - if (children != null && !children.isEmpty()) {
> - if (children.get(0) instanceof org.apache.axis.message.Text) {
> - return ((org.apache.axis.message.Text)children.get(0)).getNodeValue();
> + for (Iterator i = getChildElements(); i.hasNext(); ) {
> + NodeImpl n = (NodeImpl) i.next();
> + if (n instanceof Text) {
> + return ((Text)n).getNodeValue();
> }
> }
>
> 1.19 +10 -2 ws-axis/java/test/message/TestMessageElement.java
>
> Index: TestMessageElement.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/test/message/TestMessageElement.java,v
> retrieving revision 1.18
> retrieving revision 1.19
> diff -u -r1.18 -r1.19
> --- TestMessageElement.java 11 Nov 2004 00:29:26 -0000 1.18
> +++ TestMessageElement.java 18 Feb 2005 13:03:58 -0000 1.19
> @@ -392,6 +392,11 @@
>
> assertEquals("FooBar", getNodeValueContext(data));
> assertEquals("FooBar", getNodeValueDOM(data));
> +
> + data = "<anElement xmlns:ns1=\"aNamespace\">A>B</anElement>";
> +
> + assertEquals("A>B", getNodeValueContext(data));
> + assertEquals("A>B", getNodeValueDOM(data));
>
> data = "<anElement xmlns:ns1=\"aNamespace\"><bElement>FooBar</bElement></anElement>";
>
> @@ -400,8 +405,11 @@
>
> data = "<anElement xmlns:ns1=\"aNamespace\"><bElement>FooBar</bElement>Mixed</anElement>";
>
> - assertTrue(getNodeValueContext(data) == null);
> - assertTrue(getNodeValueDOM(data) == null);
> + // SAAJ 1.2 requires "Mixed" for this case.
> + assertEquals("Mixed", getNodeValueContext(data));
> + assertEquals("Mixed", getNodeValueDOM(data));
> +// assertTrue(getNodeValueContext(data) == null);
> +// assertTrue(getNodeValueDOM(data) == null);
>
> data = "<anElement xmlns:ns1=\"aNamespace\">Foo<bElement>FooBar</bElement>Mixed</anElement>";
>
> 1.9 +38 -0 ws-axis/java/test/saaj/TestEnvelope.java
>
> Index: TestEnvelope.java
> ===================================================================
> RCS file: /home/cvs/ws-axis/java/test/saaj/TestEnvelope.java,v
> retrieving revision 1.8
> retrieving revision 1.9
> diff -u -r1.8 -r1.9
> --- TestEnvelope.java 2 Jul 2004 13:32:41 -0000 1.8
> +++ TestEnvelope.java 18 Feb 2005 13:03:58 -0000 1.9
> @@ -7,8 +7,10 @@
> import javax.xml.soap.SOAPBody;
> import javax.xml.soap.SOAPConnection;
> import javax.xml.soap.SOAPConnectionFactory;
> +import javax.xml.soap.SOAPConstants;
> import javax.xml.soap.SOAPElement;
> import javax.xml.soap.SOAPEnvelope;
> +import javax.xml.soap.SOAPException;
> import javax.xml.soap.SOAPFault;
> import javax.xml.soap.SOAPHeader;
> import javax.xml.soap.SOAPHeaderElement;
> @@ -19,7 +21,9 @@
> import javax.xml.soap.DetailEntry;
> import java.io.ByteArrayInputStream;
> import java.io.ByteArrayOutputStream;
> +import java.io.IOException;
> import java.util.Iterator;
> +import junit.framework.AssertionFailedError;
>
> public class TestEnvelope extends junit.framework.TestCase {
>
> @@ -224,6 +228,40 @@
> assertTrue(t.isComment());
> }
>
> + public void testText4() throws SOAPException, IOException {
> + MessageFactory mf = MessageFactory.newInstance();
> + SOAPMessage smsg =
> + mf.createMessage(new MimeHeaders(), new ByteArrayInputStream(xmlString.getBytes()));
> +
> + // Make some change to the message
> + SOAPPart sp = smsg.getSOAPPart();
> + SOAPEnvelope envelope = sp.getEnvelope();
> + envelope.addTextNode("<!-- This is a comment -->");
> +
> + boolean passbody = false;
> + for (Iterator i = envelope.getChildElements(); i.hasNext(); ) {
> + Node n = (Node) i.next();
> + if (n instanceof SOAPElement) {
> + SOAPElement se = (SOAPElement) n;
> + System.out.println("soap element = " + se.getNodeName());
> + if (se.getNamespaceURI().equals(SOAPConstants.URI_NS_SOAP_ENVELOPE)
> + && se.getLocalName().equals("Body")) {
> + passbody = true;
> + }
> + }
> +
> + if (n instanceof Text) {
> + Text t = (Text)n;
> + System.out.println("text = " + t.getValue());
> + if (t.getValue().equals("<!-- This is a comment -->")) {
> + assertEquals(true, passbody);
> + return;
> + }
> + }
> + }
> + throw new AssertionFailedError("Text is not added to expected position.");
> + }
> +
> private int getIteratorCount(java.util.Iterator i) {
> int count = 0;
> while (i.hasNext()) {
>
>
--
Davanum Srinivas - http://webservices.apache.org/~dims/