[ 
https://issues.apache.org/jira/browse/TUSCANY-1565?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Frank Budinsky resolved TUSCANY-1565.
-------------------------------------

    Resolution: Cannot Reproduce

I tried it with the latest from HEAD, and there was no exception. I guess it's 
a bug in the 1.0 release that has since been fixed.


> CopyHelper.copy() fails to copy schema extensions
> -------------------------------------------------
>
>                 Key: TUSCANY-1565
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-1565
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SDO Implementation
>    Affects Versions: Java-SDO-1.0
>         Environment: Win XP, IBM JRE 1.4.2 & IBM JRE 1.5.0
>            Reporter: Chris Mildebrandt
>         Attachments: Address.xsd, CopyTest.java, Person.xsd
>
>
> Hello,
> I've been seeing some weird behavior with the copy implementation. I have two 
> schemas, one with the following line:
> <xsd:any namespace="##other" processContents="lax" minOccurs="0" 
> maxOccurs="unbounded"/>
> I'm inserting the second schema into the first as a part of this extension. 
> When I run the CopyHelper.INSTANCE.copy() method against it, weird things 
> start to happen. 
> The first case:
> Both schema files are defined dynamically. The data objects are created and 
> one is added to the other. That looks like this:
>         HelperContext context = HelperProvider.getDefaultContext();
>         {
>             InputStream in = new File("Person.xsd").toURL().openStream();
>             context.getXSDHelper().define(in, null);
>         }
>         {
>             InputStream in = new File("Address.xsd").toURL().openStream();
>             context.getXSDHelper().define(in, null);
>         }
>         DataObject person1 = 
> context.getDataFactory().create("http://www.example.org/Person";, 
> "PersonType");
>         DataObject address = 
> context.getDataFactory().create("http://www.example.org/Address";, 
> "AddressType");
>         person1.set("Age", "30");
>         person1.set("Name", "Jim");
>         address.set("Street", "123 Fake St.");
>         address.set("City", "Springfield");
>         address.set("Zip", "46392");
>         Property addressProperty = 
> context.getXSDHelper().getGlobalProperty("http://www.example.org/Address";, 
> "Address", true);
>         (person1).getList(addressProperty).add(address);
>         
>         DataObject person2 = CopyHelper.INSTANCE.copy(person1);
>         
>         person2.getList(addressProperty).clear();
>         person2.getList(addressProperty).add(address);
> When I save the data objects to files, the person1 data object doesn't 
> contain the address data object, but person2 does. When I remove the last 
> line that adds the address to person2, then the person1 data object correctly 
> contains the address data object. I would think the person1 data object 
> shouldn't be affected by changes to the person2 (copy of person1) data object.
> The second case:
> Static classes are generated for the first schema, the second is defined 
> dynamically. Data objects are created for both, and the second is added to 
> the first. That looks like this:
>         HelperContext context = HelperProvider.getDefaultContext();
>         PersonFactory.INSTANCE.register(context);
>         PersonType person1 = PersonFactory.INSTANCE.createPersonType();
>         person1.setAge("30");
>         person1.setName("Jim");
>         InputStream in = new File("Address.xsd").toURL().openStream();
>         context.getXSDHelper().define(in, null);
>         DataObject address = 
> context.getDataFactory().create("http://www.example.org/Address";, 
> "AddressType");
>         address.set("Street", "123 Fake St.");
>         address.set("City", "Springfield");
>         address.set("Zip", "46392");
>         Property addressProperty = 
> context.getXSDHelper().getGlobalProperty("http://www.example.org/Address";, 
> "Address", true);
>         ((DataObject) person1).getList(addressProperty).add(address);
>         
>         PersonType person2 = (PersonType) 
> CopyHelper.INSTANCE.copy((DataObject) person1);
>         
>         ((DataObject) person2).getList(addressProperty).clear();
>         ((DataObject) person2).getList(addressProperty).add(address);
> When I run with this, I get the following exception:
> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array 
> index out of range: -2
>       at 
> org.apache.tuscany.sdo.impl.ExtensibleDataObjectImpl.dynamicGet(ExtensibleDataObjectImpl.java:128)
>       at 
> org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$InternalSettingDelegateMany.dynamicInverseRemove(EStructuralFeatureImpl.java:1687)
>       at 
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eDynamicInverseRemove(BasicEObjectImpl.java:1038)
>       at 
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseRemove(BasicEObjectImpl.java:1027)
>       at 
> org.apache.tuscany.sdo.impl.DataObjectBase.inverseRemove(DataObjectBase.java:307)
>       at 
> org.example.person.impl.PersonTypeImpl.inverseRemove(PersonTypeImpl.java:355)
>       at 
> org.apache.tuscany.sdo.impl.DataObjectBase.eInverseRemove(DataObjectBase.java:484)
>       at 
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseRemove(BasicEObjectImpl.java:1017)
>       at 
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eBasicRemoveFromContainer(BasicEObjectImpl.java:966)
>       at 
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseAdd(BasicEObjectImpl.java:991)
>       at 
> org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$ContainmentUpdatingFeatureMapEntry.inverseAdd(EStructuralFeatureImpl.java:3060)
>       at 
> org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$ContainmentUpdatingFeatureMapEntry.inverseAdd(EStructuralFeatureImpl.java:3036)
>       at 
> org.eclipse.emf.ecore.util.BasicFeatureMap.inverseAdd(BasicFeatureMap.java:259)
>       at 
> org.eclipse.emf.ecore.util.BasicFeatureMap.addUnique(BasicFeatureMap.java:1419)
>       at 
> org.eclipse.emf.ecore.util.BasicFeatureMap.addUnique(BasicFeatureMap.java:1384)
>       at org.eclipse.emf.common.util.BasicEList.add(BasicEList.java:600)
>       at 
> org.eclipse.emf.ecore.util.BasicFeatureMap.doAdd(BasicFeatureMap.java:505)
>       at 
> org.eclipse.emf.ecore.util.BasicFeatureMap.add(BasicFeatureMap.java:1131)
>       at 
> org.eclipse.emf.ecore.util.FeatureMapUtil$FeatureEList.add(FeatureMapUtil.java:646)
>       at Test.otherTest_Static_Person(Test.java:351)
>       at Test.main(Test.java:443)
> That exception happens on the last line, the add to the copy. This only 
> happens with the official Tuscany 1.0 jars (build date of Aug 6). I've built 
> the project on July 20 and Aug 9 and neither of those throw this exception. 
> Instead of throwing the exception, those two versions have the same behavior 
> as the first case, which is still wrong. I'll attach the files to this bug. 
> Let me know if there are any questions.
> Thanks,
> -Chris

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to