You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ga...@apache.org on 2004/11/11 01:00:49 UTC
cvs commit: ws-axis/java/src/org/apache/axis/message MessageElement.java SOAPEnvelope.java
gawor 2004/11/10 16:00:49
Modified: java/src/org/apache/axis/message MessageElement.java
SOAPEnvelope.java
Added: java/src/org/apache/axis/encoding
TextSerializationContext.java
Log:
optimizations to MessageElement.getValue()
Revision Changes Path
1.1 ws-axis/java/src/org/apache/axis/encoding/TextSerializationContext.java
Index: TextSerializationContext.java
===================================================================
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed 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.axis.encoding;
import java.io.IOException;
import java.io.Writer;
import javax.xml.namespace.QName;
import org.apache.axis.MessageContext;
import org.apache.axis.utils.Messages;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
/**
* For internal use only. Used to get the first text node of an element.
*
* @author Jarek Gawor (gawor@apache.org)
*/
public class TextSerializationContext extends SerializationContext {
private boolean ignore = false;
private int depth = 0;
public TextSerializationContext(Writer writer)
{
super(writer);
}
public TextSerializationContext(Writer writer, MessageContext msgContext)
{
super(writer, msgContext);
}
public void serialize(QName elemQName,
Attributes attributes,
Object value,
QName xmlType,
Boolean sendNull,
Boolean sendType)
throws IOException
{
throw new IOException(Messages.getMessage("notImplemented00",
"serialize"));
}
public void writeDOMElement(Element el)
throws IOException
{
throw new IOException(Messages.getMessage("notImplemented00",
"writeDOMElement"));
}
public void startElement(QName qName, Attributes attributes)
throws IOException
{
depth++;
if (depth == 2) {
this.ignore = true;
}
}
public void endElement()
throws IOException
{
depth--;
ignore = true;
}
public void writeChars(char [] p1, int p2, int p3)
throws IOException
{
if (!this.ignore) {
super.writeChars(p1, p2, p3);
}
}
public void writeString(String string)
throws IOException
{
if (!this.ignore) {
super.writeString(string);
}
}
}
1.188 +38 -1 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.187
retrieving revision 1.188
diff -u -r1.187 -r1.188
--- MessageElement.java 7 Nov 2004 11:26:37 -0000 1.187
+++ MessageElement.java 11 Nov 2004 00:00:49 -0000 1.188
@@ -23,6 +23,7 @@
import org.apache.axis.encoding.DeserializationContext;
import org.apache.axis.encoding.Deserializer;
import org.apache.axis.encoding.SerializationContext;
+import org.apache.axis.encoding.TextSerializationContext;
import org.apache.axis.enum.Style;
import org.apache.axis.soap.SOAPConstants;
import org.apache.axis.utils.Mapping;
@@ -2037,7 +2038,8 @@
if(child.getNodeType()==TEXT_NODE ||
child.getNodeType()==CDATA_SECTION_NODE ||
child.getNodeType()==COMMENT_NODE ) {
- MessageElement childElement = new MessageElement((CharacterData)child);
+ org.apache.axis.message.Text childElement =
+ new org.apache.axis.message.Text((CharacterData)child);
dest.appendChild(childElement);
} else {
PrefixedQName qname = new PrefixedQName(child.getNamespaceURI(),
@@ -2059,6 +2061,41 @@
* @see javax.xml.soap.Node#getValue() ;
*/
public String getValue() {
+ if ((recorder != null) && (!_isDirty)) {
+ StringWriter writer = new StringWriter();
+ TextSerializationContext outputContext =
+ new TextSerializationContext(writer);
+ try {
+ recorder.replay(startEventIndex,
+ endEventIndex,
+ new SAXOutputter(outputContext));
+ } catch (Exception t) {
+ log.debug("getValue()", t);
+ return null;
+ }
+ String value = writer.toString();
+ return (value.length() == 0) ? null : value;
+ }
+
+ if (textRep != null) {
+ // weird case: error?
+ return textRep.getNodeValue();
+ }
+
+ if (objectValue != null) {
+ 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();
+ }
+ }
+
+ return null;
+ }
+
+ protected String getValueDOM() {
try {
Element element = getAsDOM();
if (element.hasChildNodes()) {
1.104 +5 -0 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.103
retrieving revision 1.104
diff -u -r1.103 -r1.104
--- SOAPEnvelope.java 7 Nov 2004 11:26:37 -0000 1.103
+++ SOAPEnvelope.java 11 Nov 2004 00:00:49 -0000 1.104
@@ -672,4 +672,9 @@
setOwnerDocumentForChildren(node.getChildNodes(), sp); // recursively
}
}
+
+ public String getValue() {
+ return getValueDOM();
+ }
+
}