You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsif-dev@ws.apache.org by hu...@apache.org on 2003/07/01 12:16:42 UTC
cvs commit: xml-axis-wsif/java/src/org/apache/wsif/base WSIFDefaultMessage.java
hughesj 2003/07/01 03:16:42
Modified: java/src/org/apache/wsif/base WSIFDefaultMessage.java
Log:
Performance improvement for clone(). If the part is an objectified simple type
then make a copy rather than serialize to an objectstream.
Also, don't construct an iterator for part names if there are no parts.
Removed unused WSIFConstants import
PR:
Obtained from:
Submitted by:
Reviewed by:
CVS: ----------------------------------------------------------------------
CVS: PR:
CVS: If this change addresses a PR in the problem report tracking
CVS: database, then enter the PR number(s) here.
CVS: Obtained from:
CVS: If this change has been taken from another system, such as NCSA,
CVS: then name the system in this line, otherwise delete it.
CVS: Submitted by:
CVS: If this code has been contributed to Apache by someone else; i.e.,
CVS: they sent us a patch or a new module, then include their name/email
CVS: address here. If this is your work then delete this line.
CVS: Reviewed by:
CVS: If we are doing pre-commit code reviews and someone else has
CVS: reviewed your changes, include their name(s) here.
CVS: If you have not had it reviewed then delete this line.
Revision Changes Path
1.13 +99 -48 xml-axis-wsif/java/src/org/apache/wsif/base/WSIFDefaultMessage.java
Index: WSIFDefaultMessage.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/base/WSIFDefaultMessage.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- WSIFDefaultMessage.java 9 Apr 2003 17:02:42 -0000 1.12
+++ WSIFDefaultMessage.java 1 Jul 2003 10:16:42 -0000 1.13
@@ -68,7 +68,6 @@
import java.util.Map;
import javax.wsdl.Message;
-import org.apache.wsif.WSIFConstants;
import org.apache.wsif.WSIFException;
import org.apache.wsif.WSIFMessage;
import org.apache.wsif.logging.Trc;
@@ -510,64 +509,116 @@
dm.setName(this.name);
dm.setRepresentationStyle(this.style);
dm.setMessageDefinition(this.msgDefinition);
- Iterator it = getPartNames();
- while (it.hasNext()) {
- String pn = (String) it.next();
- Object po = parts.get(pn);
- if (po == null) {
- try {
- dm.setObjectPart(pn, null);
- } catch (Exception e) {
- Trc.exception(e);
- throw new CloneNotSupportedException(
- "Exception thrown whilst cloning part "
- + pn
- + ". Message is "
- + e.getMessage());
+
+ if (parts != null) {
+ // Clone the parts:
+ Iterator it = getPartNames();
+ while (it.hasNext()) {
+ // For each part:
+ // 1. if it's null, null out the clone
+ // 2. if it's an objectified primitive type, copy the object
+ // 3. if it's cloneable, create a clone for it
+ // 4. if it's serializable, write it to an objectstream, read
+ // it back into a new object for the clone
+ String pn = (String) it.next();
+ Object po = parts.get(pn);
+ if (po == null) {
+ try {
+ dm.setObjectPart(pn, null);
+ } catch (Exception e) {
+ Trc.exception(e);
+ throw new CloneNotSupportedException(
+ "Exception thrown whilst cloning part "
+ + pn
+ + ". Message is "
+ + e.getMessage());
+ }
+ continue;
+ }
+
+ Object simpleTypeObj = null;
+ if (po instanceof String) {
+ simpleTypeObj = new String((String) po);
+ } else if (po instanceof Integer) {
+ simpleTypeObj = new Integer(((Integer) po).intValue());
+ } else if (po instanceof Float) {
+ simpleTypeObj = new Float(((Float) po).floatValue());
+ } else if (po instanceof Byte) {
+ simpleTypeObj = new Byte(((Byte) po).byteValue());
+ } else if (po instanceof Long) {
+ simpleTypeObj = new Long(((Long) po).longValue());
+ } else if (po instanceof Short) {
+ simpleTypeObj = new Short(((Short) po).shortValue());
+ } else if (po instanceof Double) {
+ simpleTypeObj = new Double(((Double) po).doubleValue());
+ } else if (po instanceof Boolean) {
+ simpleTypeObj = new Boolean(((Boolean) po).booleanValue());
}
- } else if (po instanceof Cloneable) {
- Class cls = po.getClass();
+
try {
- Method clone = cls.getMethod("clone", null);
- Object poc = clone.invoke(po, null);
- dm.setObjectPart(pn, poc);
- } catch (InvocationTargetException e) {
- Trc.exception(e);
- throw new CloneNotSupportedException(
- "Exception thrown whilst cloning part "
- + pn
- + ". Message is "
- + e.getTargetException().getMessage());
+ if (simpleTypeObj != null) {
+ dm.setObjectPart(pn, simpleTypeObj);
+ continue;
+ }
} catch (Exception e) {
- Trc.exception(e);
+ Trc.exception(e);
throw new CloneNotSupportedException(
"Exception thrown whilst cloning part "
+ pn
+ ". Message is "
+ e.getMessage());
}
- } else if (po instanceof Serializable) {
- try {
- ByteArrayOutputStream b = new ByteArrayOutputStream();
- ObjectOutputStream out = new ObjectOutputStream(b);
- out.writeObject(po);
- out.flush();
- out.close();
- byte[] data = b.toByteArray();
- WSIFObjectInputStream in = new WSIFObjectInputStream(new ByteArrayInputStream(data));
- Object poc = in.readObject();
- in.close();
- dm.setObjectPart(pn, poc);
- } catch (Exception e) {
- Trc.exception(e);
+
+ if (po instanceof Cloneable) {
+ Class cls = po.getClass();
+ try {
+ Method clone = cls.getMethod("clone", null);
+ Object poc = clone.invoke(po, null);
+ dm.setObjectPart(pn, poc);
+ } catch (InvocationTargetException e) {
+ Trc.exception(e);
+ throw new CloneNotSupportedException(
+ "Exception thrown whilst cloning part "
+ + pn
+ + ". Message is "
+ + e.getTargetException().getMessage());
+ } catch (Exception e) {
+ Trc.exception(e);
+ throw new CloneNotSupportedException(
+ "Exception thrown whilst cloning part "
+ + pn
+ + ". Message is "
+ + e.getMessage());
+ }
+ continue;
+ }
+ if (po instanceof Serializable) {
+ try {
+ ByteArrayOutputStream b = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(b);
+ out.writeObject(po);
+ out.flush();
+ out.close();
+ byte[] data = b.toByteArray();
+ WSIFObjectInputStream in =
+ new WSIFObjectInputStream(
+ new ByteArrayInputStream(data));
+ Object poc = in.readObject();
+ in.close();
+ dm.setObjectPart(pn, poc);
+ } catch (Exception e) {
+ Trc.exception(e);
+ throw new CloneNotSupportedException(
+ "Exception thrown whilst cloning part "
+ + pn
+ + " by serialization. Message is "
+ + e.getMessage());
+ }
+ } else {
throw new CloneNotSupportedException(
- "Exception thrown whilst cloning part "
- + pn
- + " by serialization. Message is "
- + e.getMessage());
+ "Part " + pn + " cannot be cloned");
}
- } else {
- throw new CloneNotSupportedException("Part " + pn + " cannot be cloned");
+ // Not reached. Don't put code here
}
}
if (Trc.ON)