This commit is contained in:
Arjen Poutsma
2008-06-06 15:55:29 +00:00
parent c65b1f8cff
commit b8effcb73f
3 changed files with 48 additions and 29 deletions

View File

@@ -24,6 +24,8 @@ import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPFactory;
/**
* Caching payload in Axiom.
*
* @author Arjen Poutsma
* @since 1.5.2
*/

View File

@@ -35,6 +35,8 @@ import org.apache.axiom.soap.SOAPFactory;
import org.springframework.xml.transform.StaxResult;
/**
* Non-caching payload in Axiom.
*
* @author Jim Cummings
* @author Arjen Poutsma
* @since 1.5.2
@@ -63,7 +65,9 @@ class NonCachingPayload extends Payload {
private QName name;
private String encoding;
private String encoding = "UTF-8";
private int elementDepth = 0;
private DelegatingStreamWriter() {
try {
@@ -75,11 +79,11 @@ class NonCachingPayload extends Payload {
}
public void writeStartDocument() throws XMLStreamException {
this.encoding = "UTF-8";
// ignored
}
public void writeStartDocument(String version) throws XMLStreamException {
this.encoding = "UTF-8";
// ignored
}
public void writeStartDocument(String encoding, String version) throws XMLStreamException {
@@ -87,7 +91,42 @@ class NonCachingPayload extends Payload {
}
public void writeEndDocument() throws XMLStreamException {
delegate.writeEndDocument();
// ignored
}
public void writeStartElement(String localName) throws XMLStreamException {
if (name == null) {
name = new QName(localName);
}
elementDepth++;
delegate.writeStartElement(localName);
}
public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException {
if (name == null) {
name = new QName(namespaceURI, localName);
}
elementDepth++;
delegate.writeStartElement(namespaceURI, localName);
}
public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException {
if (name == null) {
name = new QName(namespaceURI, localName, prefix);
}
elementDepth++;
delegate.writeStartElement(prefix, localName, namespaceURI);
}
public void writeEndElement() throws XMLStreamException {
elementDepth--;
delegate.writeEndElement();
if (elementDepth <= 0) {
addPayload();
}
}
private void addPayload() throws XMLStreamException {
delegate.flush();
if (baos.size() > 0) {
byte[] buf = baos.toByteArray();
@@ -99,27 +138,6 @@ class NonCachingPayload extends Payload {
}
}
public void writeStartElement(String localName) throws XMLStreamException {
if (name == null) {
name = new QName(localName);
}
delegate.writeStartElement(localName);
}
public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException {
if (name == null) {
name = new QName(namespaceURI, localName);
}
delegate.writeStartElement(namespaceURI, localName);
}
public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException {
if (name == null) {
name = new QName(namespaceURI, localName, prefix);
}
delegate.writeStartElement(prefix, localName, namespaceURI);
}
public void writeEmptyElement(String localName) throws XMLStreamException {
if (name == null) {
name = new QName(localName);
@@ -212,10 +230,6 @@ class NonCachingPayload extends Payload {
delegate.writeDTD(dtd);
}
public void writeEndElement() throws XMLStreamException {
delegate.writeEndElement();
}
public void writeEntityRef(String name) throws XMLStreamException {
delegate.writeEntityRef(name);
}

View File

@@ -30,6 +30,9 @@ import org.springframework.ws.soap.axiom.support.AxiomUtils;
import org.springframework.xml.transform.StaxSource;
/**
* Abstract base class for payloads in Axiom. Comes in two flavors: {@link CachingPayload} and {@link
* NonCachingPayload}.
*
* @author Arjen Poutsma
* @since 1.5.2
*/