You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@ws.apache.org by sn...@apache.org on 2002/11/18 17:42:41 UTC
cvs commit: xml-soap/java/src/org/apache/soap Envelope.java Body.java
snichol 2002/11/18 08:42:41
Modified: java/src/org/apache/soap Envelope.java Body.java
Log:
Submitted by: Pavel Ausianik <Pa...@epam.com>
Reduce number of AttributeHandlers.
Additional edits by Scott Nichol to add javadoc and other comments, plus
try to throw exceptions before doing unnecessary work.
Revision Changes Path
1.12 +84 -33 xml-soap/java/src/org/apache/soap/Envelope.java
Index: Envelope.java
===================================================================
RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/Envelope.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- Envelope.java 6 Nov 2002 15:11:08 -0000 1.11
+++ Envelope.java 18 Nov 2002 16:42:40 -0000 1.12
@@ -71,21 +71,32 @@
*
* @author Matthew J. Duftler (duftler@us.ibm.com)
* @author Sanjiva Weerawarana (sanjiva@watson.ibm.com)
+ * @author Pavel Ausianik (Pavel_Ausianik@epam.com)
+ * @author Scott Nichol (snichol@computer.org)
*/
public class Envelope
{
+ // The SOAP envelope header
private Header header = null;
+ // The SOAP envelope body
private Body body = null;
+ // The SOAP envelope (non-Body) entries; type is Element
private Vector envelopeEntries = null;
- private AttributeHandler attrHandler = new AttributeHandler();
+ // Attributes from XML element
+ private AttributeHandler attrHandler = null;
private static final QName N_SOAP_ENV = new QName(Constants.NS_URI_XMLNS, Constants.NS_PRE_SOAP_ENV);
private static final QName N_SCHEMA_XSI = new QName(Constants.NS_URI_XMLNS, Constants.NS_PRE_SCHEMA_XSI);
private static final QName N_SCHEMA_XSD = new QName(Constants.NS_URI_XMLNS, Constants.NS_PRE_SCHEMA_XSD);
private static final QName N_ENCOD_STYLE = new QName(Constants.NS_URI_SOAP_ENV, Constants.ATTR_ENCODING_STYLE);
+ /**
+ * Default constructor. Typically used for outgoing messages.
+ */
public Envelope()
{
+ attrHandler = new AttributeHandler();
+
// Declare the "SOAP-ENV" namespace.
setAttribute(N_SOAP_ENV, Constants.NS_URI_SOAP_ENV);
@@ -96,51 +107,91 @@
setAttribute(N_SCHEMA_XSD, Constants.NS_URI_CURRENT_SCHEMA_XSD);
}
+ /**
+ * Constructor that specifies an attribute handler. Typically used for
+ * incoming messages.
+ *
+ * @param attrHandler The attribute handler.
+ */
+ public Envelope(AttributeHandler attrHandler) {
+ this.attrHandler = attrHandler;
+ }
+
+ /**
+ * Sets an XML element attribute.
+ */
public void setAttribute(QName attrQName, String value)
{
attrHandler.setAttribute(attrQName, value);
}
+ /**
+ * Gets an XML element attribute.
+ */
public String getAttribute(QName attrQName)
{
return attrHandler.getAttribute(attrQName);
}
+ /**
+ * Removes an XML element attribute.
+ */
public void removeAttribute(QName attrQName)
{
attrHandler.removeAttribute(attrQName);
}
+ /**
+ * Sets a namespace prefix/URI for an XML element attribute.
+ */
public void declareNamespace(String nsPrefix, String namespaceURI)
{
attrHandler.declareNamespace(nsPrefix, namespaceURI);
}
+ /**
+ * Sets the SOAP envelope header.
+ */
public void setHeader(Header header)
{
this.header = header;
}
+ /**
+ * Gets the SOAP envelope header.
+ */
public Header getHeader()
{
return header;
}
+ /**
+ * Sets the SOAP envelope body.
+ */
public void setBody(Body body)
{
this.body = body;
}
+ /**
+ * Gets the SOAP envelope body.
+ */
public Body getBody()
{
return body;
}
+ /**
+ * Sets the SOAP envelope (non-Body) entries (type Element).
+ */
public void setEnvelopeEntries(Vector envelopeEntries)
{
this.envelopeEntries = envelopeEntries;
}
+ /**
+ * Gets the SOAP envelope (non-Body) entries (type Element).
+ */
public Vector getEnvelopeEntries()
{
return envelopeEntries;
@@ -156,17 +207,27 @@
marshall(sink, xjmr, new SOAPContext());
}
+ /**
+ * Marshalls the Envelope as XML.
+ */
public void marshall(Writer sink, XMLJavaMappingRegistry xjmr,
SOAPContext ctx)
throws IllegalArgumentException, IOException
{
+ // There must always be a <SOAP-ENV:Body>.
+ Body body = getBody();
+ if (body == null) {
+ throw new IllegalArgumentException("An '" + Constants.Q_ELEM_ENVELOPE +
+ "' must contain a: '" +
+ Constants.Q_ELEM_BODY + "'.");
+ }
+
// Initialize the namespace stack.
NSStack nsStack = new NSStack();
attrHandler.populateNSStack(nsStack);
Header header = getHeader();
- Body body = getBody();
Vector envelopeEntries = getEnvelopeEntries();
String declEncStyle = getAttribute(N_ENCOD_STYLE);
@@ -192,17 +253,8 @@
header.marshall(sink, nsStack, xjmr, ctx);
}
- // There must always be a <SOAP-ENV:Body>.
- if (body != null)
- {
- body.marshall(declEncStyle, sink, nsStack, xjmr, ctx);
- }
- else
- {
- throw new IllegalArgumentException("An '" + Constants.Q_ELEM_ENVELOPE +
- "' must contain a: '" +
- Constants.Q_ELEM_BODY + "'.");
- }
+ // Serialize the body
+ body.marshall(declEncStyle, sink, nsStack, xjmr, ctx);
// Serialize any envelope entries (in addition to <SOAP-ENV:Body>).
if (envelopeEntries != null)
@@ -233,17 +285,17 @@
return unmarshall(src, new SOAPContext());
}
+ /**
+ * Unmarshalls the envelope from XML.
+ */
public static Envelope unmarshall(Node src, SOAPContext ctx)
throws IllegalArgumentException
{
Element root = (Element)src;
- Envelope env = new Envelope();
+ Envelope env = null;
if (Constants.Q_ELEM_ENVELOPE.matches(root))
{
- // Deserialize any envelope attributes.
- env.attrHandler = AttributeHandler.unmarshall(root, ctx);
-
// Examine the subelements of the envelope.
Element headerEl = null;
Element bodyEl = null;
@@ -260,22 +312,6 @@
bodyEl = tempEl;
tempEl = DOMUtils.getNextSiblingElement(tempEl);
}
-
- // Deserialize any header entries.
- if (headerEl != null)
- {
- Header header = Header.unmarshall(headerEl, ctx);
-
- env.setHeader(header);
- }
-
- // Deserialize any body entries.
- if (bodyEl != null)
- {
- Body body = Body.unmarshall(bodyEl, ctx);
-
- env.setBody(body);
- }
else
{
throw new IllegalArgumentException("An '" + Constants.Q_ELEM_ENVELOPE +
@@ -284,6 +320,18 @@
"' element.");
}
+ // Deserialize any envelope attributes.
+ env = new Envelope(AttributeHandler.unmarshall(root, ctx));
+
+ // Deserialize the header if present.
+ if (headerEl != null)
+ {
+ env.setHeader(Header.unmarshall(headerEl, ctx));
+ }
+
+ // Deserialize the body entry.
+ env.setBody(Body.unmarshall(bodyEl, ctx));
+
// Deserialize any envelope entries (in addition to <SOAP-ENV:Body>).
if (tempEl != null)
{
@@ -321,6 +369,9 @@
return env;
}
+ /**
+ * Gets this envelope as a string.
+ */
public String toString()
{
StringWriter sw = new StringWriter();
1.10 +49 -3 xml-soap/java/src/org/apache/soap/Body.java
Index: Body.java
===================================================================
RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/Body.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Body.java 6 Nov 2002 15:11:08 -0000 1.9
+++ Body.java 18 Nov 2002 16:42:40 -0000 1.10
@@ -74,42 +74,83 @@
* @author Matthew J. Duftler (duftler@us.ibm.com)
* @author Sanjiva Weerawarana (sanjiva@watson.ibm.com)
* @author Scott Nichol (snichol@computer.org)
+ * @author Pavel Ausianik (Pavel_Ausianik@epam.com)
*/
public class Body
{
+ // Body entries are Element or Bean
private Vector bodyEntries = null;
- private AttributeHandler attrHandler = new AttributeHandler();
+ // Attributes from XML element
+ private AttributeHandler attrHandler = null;
+ /**
+ * Default constructor. Typically used for outgoing messages.
+ */
+ public Body() {
+ attrHandler = new AttributeHandler();
+ }
+
+ /**
+ * Constructor that specifies the attribute handler. Typically used
+ * for incoming messages.
+ *
+ * @param attrHandler The attribute handler.
+ */
+ public Body(AttributeHandler attrHandler) {
+ this.attrHandler = attrHandler;
+ }
+
+ /**
+ * Sets an XML element attribute.
+ */
public void setAttribute(QName attrQName, String value)
{
attrHandler.setAttribute(attrQName, value);
}
+ /**
+ * Gets an XML element attribute.
+ */
public String getAttribute(QName attrQName)
{
return attrHandler.getAttribute(attrQName);
}
+ /**
+ * Removes an XML element attribute.
+ */
public void removeAttribute(QName attrQName)
{
attrHandler.removeAttribute(attrQName);
}
+ /**
+ * Sets a namespace prefix/URI for an XML element attribute.
+ */
public void declareNamespace(String nsPrefix, String namespaceURI)
{
attrHandler.declareNamespace(nsPrefix, namespaceURI);
}
+ /**
+ * Sets the body entries, which are of type Element or Bean.
+ */
public void setBodyEntries(Vector bodyEntries)
{
this.bodyEntries = bodyEntries;
}
+ /**
+ * Gets the body entries, which are of type Element or Bean.
+ */
public Vector getBodyEntries()
{
return bodyEntries;
}
+ /**
+ * Marshalls the Body as XML.
+ */
public void marshall(String inScopeEncStyle, Writer sink, NSStack nsStack,
XMLJavaMappingRegistry xjmr, SOAPContext ctx)
throws IllegalArgumentException, IOException
@@ -198,14 +239,16 @@
nsStack.popScope();
}
+ /**
+ * Unmarshalls the body from XML.
+ */
public static Body unmarshall(Node src, SOAPContext ctx) throws IllegalArgumentException
{
Element root = (Element)src;
- Body body = new Body();
+ Body body = new Body(AttributeHandler.unmarshall(root, ctx));
Vector bodyEntries = new Vector();
// Deserialize any body attributes.
- body.attrHandler = AttributeHandler.unmarshall(root, ctx);
for (Element el = DOMUtils.getFirstChildElement(root);
el != null;
@@ -219,6 +262,9 @@
return body;
}
+ /**
+ * Gets this body as a string.
+ */
public String toString()
{
StringWriter sw = new StringWriter();