Hi Frank, Much thanks. This would be good information for a Tuscany SDO FAQ.
- Ron ----- Original Message ---- From: Frank Budinsky <[EMAIL PROTECTED]> To: [email protected] Sent: Monday, October 29, 2007 3:04:32 PM Subject: Re: XMLHelper.save() expected behavior Hi Ron, Unfortunately, XMLHelper.save() has the side-effect of temporarily removing the DataObject from its container (i.e., the quotes list in your case). It puts it back before returning from save(), but unfortunately iterators don't allow any kind of manipulation to happen. Rather than copy, a sollution with better performance would be to use a counter instead of an iterator, something like this: for (int index = 0; index < quotes.size(); ++index;) { DataObject quote = (DataObject)quotes.get(index); xmlh.save(quote, null, "quotes"); } Frank. Ron Gavlin <[EMAIL PROTECTED]> 10/29/2007 02:28 PM Please respond to [email protected] To tuscany-user tuscany-user <[email protected]> cc Subject XMLHelper.save() expected behavior Greetings, I added the following simple method to XMLHelperTestCase. When I invoke this new test method, a ConcurrentModificationException is thrown (see the stack trace below). Is this the expected behavior? I can avoid the problem by making a copy of the quote DataObject before I save it. However, it is not clear to me why this is necessary. - Ron public void testSaveDataObjectListEntries() throws IOException { XMLDocument doc = xmlh.load(getClass().getResource("/simpleWithChangeSummary.xml").openStream()); List quotes = doc.getRootObject().getList("quotes"); for (Iterator iterator = quotes.iterator(); iterator.hasNext();) { DataObject quote = (DataObject)iterator.next(); xmlh.save(quote, null, "quotes"); } } java.util.ConcurrentModificationException at org.eclipse.emf.common.util.BasicEList$EIterator.checkModCount(BasicEList.java:1327) at org.eclipse.emf.common.util.BasicEList$EIterator.next(BasicEList.java:1275) at org.apache.tuscany.sdo.test.XMLHelperTestCase.testSaveDataObjectListEntries(XMLHelperTestCase.java:107) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
