It would be good if you could send us a patch with the changes you made 
and a test case you're trying to run. Then we can look at it while we help 
you get it working.

Thanks,
Frank


"Christian Landbo Frederiksen" <[EMAIL PROTECTED]> 
wrote on 02/13/2007 04:47:11 PM:

> Arghhh just ignore the last one.
> 
> I was testing with different namespaces :(
> 
> I still have the nullpointer!
> 
> Sorry for all the spamming - I'm getting pretty frustrated now. I think
> I'll go to bed....
> 
> /Chr
> 
> 
> -----Original Message-----
> From: Christian Landbo Frederiksen
> [mailto:[EMAIL PROTECTED] 
> Sent: 13. februar 2007 22:40
> To: tuscany-user@ws.apache.org
> Subject: RE: SDO (Types) Registry
> 
> Further info:
> 
> If I remove the extensibleNamespaces I added to XSDHelperImpl so it
> again looks like this:
> 
>         if (ePackage == null ||
> TypeHelperImpl.getBuiltInModels().contains(ePackage)) 
> 
> The nullpointerexception does not occur but then the existing types of a
> namespace does not seem to respond to changes...
> 
> Ought the extensibleNamespaces change stay in:
> 
> if (extensibleNamespaces || ePackage == null ||
> TypeHelperImpl.getBuiltInModels().contains(ePackage)) 
> 
> /Chr
> 
> -----Original Message-----
> From: Christian Landbo Frederiksen
> [mailto:[EMAIL PROTECTED] 
> Sent: 13. februar 2007 21:24
> To: tuscany-user@ws.apache.org
> Subject: RE: SDO (Types) Registry
> 
> Hi Frank
> 
> I tried adding your code very brute forcely by pulling down
> computeEClass and computeEDataType from XSDEcoreBuilder to
> SDOXSDEcoreBuilder, giving these two methods new names and calling them
> from the already existing computeEClass and computeEDataType in
> SDOXSDEcoreBuilder. In the two pulled down methods I call the
> addOrReplaceInSortedList instead of addToSortedList.
> 
> When I debug it it seems to do the trick in the addOrReplaceInSortedList
> method - but once I run it it fails somehow.
> 
> The XSDHelper.INSTANCE.define method completes fine using the new code,
> but afterward I execute the following (where 'rootElement' is set to the
> root I seek in the particular invocation):
> 
>          DataObject documentDataObject =
> DataFactory.INSTANCE.create(namespace, "DocumentRoot");
>          List documentProperties =
> documentDataObject.getInstanceProperties();
>          Property rootProperty = null;
>          for (Iterator i = documentProperties.iterator();
> i.hasNext();) {
>             Property p = (Property) i.next();
> // point 1 
>             if (rootElement.equals(p.getName())) {
>                rootProperty = p;
>                continue;
>             }
>          }
> 
>          if (rootProperty == null) {
>             throw new RuntimeException("FOUND NO
> ROOT");
>          }
> 
>          if (!rootProperty.isContainment()) {
>             throw new RuntimeException("ROOT IS NOT
> CONTAINMENT: " + rootProperty);
>          } else {
> // point 2
>             DataObject rootDataObject =
> documentDataObject.createDataObject(rootProperty);
> 
>             CompositeXmlElement xmlElement = new
> CompositeXmlElement(rootDataObject, rootProperty);
>             handleRootDataObject(xmlElement);
>             return xmlElement;
>          }
> 
> 
> At point 1 I get propertyX, propertyX1, propertyX11 even with the new
> code that ought to replace propertyX??
> 
> At point 2 I now get:
> 
> java.lang.NullPointerException
> at org.eclipse.emf.ecore.util.EcoreUtil.create(EcoreUtil.java:2970)
> at
> org.apache.tuscany.sdo.util.DataObjectUtil.create(DataObjectUtil.java:24
> 72)
> at
> org.apache.tuscany.sdo.util.DataObjectUtil.createDataObject(DataObjectUt
> il.java:434)
> at
> org.apache.tuscany.sdo.util.DataObjectUtil.createDataObject(DataObjectUt
> il.java:463)
> at
> org.apache.tuscany.sdo.impl.DataObjectImpl.createDataObject(DataObjectIm
> pl.java:1216)
> 
> Any ideas (if you can interpret this mail)?
> 
> /Chr
> 
> -----Original Message-----
> From: Frank Budinsky [mailto:[EMAIL PROTECTED] 
> Sent: 13. februar 2007 18:23
> To: tuscany-user@ws.apache.org
> Subject: RE: SDO (Types) Registry
> 
> Hi Christian,
> 
> To replace an existing type, you need to override the behavior of 
> XSDEcoreBuilder methods: createEClass() and createEDataType() to not add
> a 
> duplicate, but instead replace it when found. I noticed that they both 
> call this method to add the new type:
> 
>   public static void addToSortedList(List eNamedElements, ENamedElement 
> eNamedElement)
>   {
>     int index = Collections.binarySearch(eNamedElements, eNamedElement, 
> Comparator.INSTANCE);
>     if (index < 0)
>     {
>       eNamedElements.add(-(index + 1), eNamedElement);
>     }
>     else if (eNamedElements.get(index) != eNamedElement)
>     {
>       eNamedElements.add(index, eNamedElement);
>     }
>   }
> 
> What you want is to do is something like this instead:
> 
>    public static void addOrReplaceInSortedList(List eNamedElements, 
> ENamedElement eNamedElement)
>   {
>     int index = Collections.binarySearch(eNamedElements, eNamedElement, 
> Comparator.INSTANCE);
>     if (index < 0)
>     {
>       eNamedElements.add(-(index + 1), eNamedElement);
>     }
>     else if (eNamedElements.get(index) != eNamedElement)
>     {
>       eNamedElements.set(index, eNamedElement); // overwrite existing 
> element
>     }
>   }
> 
> The only question, is how best to optionally turn on this behavior. I 
> think that adding something like this in SDOXSDEcoreBuilder:
> 
>   protected boolean overwrite = false;
> 
> and setting it to true in XSDHelperImpl, when you want this behavior.
> 
> Anyway, that's where I'd start. Then you can try to figure out where
> best 
> to check the variable and change to the alternate 
> addOrReplaceInSortedList() behavior.
> 
> Let me know how it goes, and if you have any other questions.
> 
> Frank.
> 
> 
> "Christian Landbo Frederiksen" <[EMAIL PROTECTED]>
> 
> wrote on 02/12/2007 03:15:52 PM:
> 
> > Hi Frank et. al.
> > 
> > First I'll summarize my use case as Yang Zhong requested:
> > 
> > An xml schema is uploaded and SDO is used to generate a form for
> > submitting data as xml-instances of the schema. 
> > New schemas in the same namespace may be added often resulting in new
> > forms (this is the first issue where I need to extend existing
> > namespaces).
> > 
> > Xml instances may later be edited again.
> > This is the most common use case and SDO seems to support this very
> > well. 
> > 
> > BUT xml schemas may be modified, even individual types.
> > 
> > This of course flagged some warning signs and schema versions were
> > considered. 
> > But 'use at own risk' was chosen because of its simplicity. To support
> > this strategy a status/mode will be introduced so xml-instances cannot
> > be edited while schema is in 'administration'-mode. This ought to
> handle
> > the case with instances at schema-modification time.
> > 
> > With regards to serialized xml instances any data that is rendered
> > invalid with type changes will be reset/deleted as of design. 
> > 
> > I sure like the fact that you say it would not be difficult to
> implement
> > replacing existing types and I would greatly appreciate any help in
> that
> > direction.
> > 
> > /Chr
> > 
> > 
> > -----Original Message-----
> > From: Frank Budinsky [mailto:[EMAIL PROTECTED] 
> > Sent: 12. februar 2007 20:37
> > To: tuscany-user@ws.apache.org
> > Subject: RE: SDO (Types) Registry
> > 
> > Christian,
> > 
> > I don't think your scenario is beyond the purpose of SDO - In fact, I
> > see 
> > it as a "real world" example that we should try to accommodate.
> > 
> > To provide an option that allows you to overwrite/replace existing
> > types, 
> > would not be difficult to do - but it would be dangerous to use if,
> for 
> > example, you have instances of the types at the time you change them. 
> > Also, you could end up with corrupt models if, for example, you delete
> a
> > 
> > type that is referenced by another. What about serialized XML
> instances?
> > 
> > If you change a type and then try to load a serialized XML, unless the
> 
> > types are a compatible extension (i.e., only new things added), it may
> > no 
> > longer conform to the schema. What level of versioning does this 
> > requirement imply?
> > 
> > Would it be acceptable if this option was a "use at own risk" feature
> - 
> > the user needs to be very careful when using it?
> > 
> > I realize that, as an SDO/EMF novice, you may have a hard time finding
> > the 
> > right places in the code that need to change, so we can help with
> that,
> > if 
> > we agree exactly what we're trying to implement.
> > 
> > Frank.
> > 
> > "Christian Landbo Frederiksen"
> <[EMAIL PROTECTED]>
> > 
> > wrote on 02/12/2007 01:40:25 PM:
> > 
> > > 
> > > 
> > > Let me first say, I don't not have very much insight into how
> Tuscany
> > is
> > > built up.
> > > 
> > > I am dealing with a situation where the xsd's, that define the
> format
> > of
> > > a generic data publishing sysem, can be added and changed
> dynamically
> > -
> > > even the individual types of a namespace can be changed (probably
> not
> > > very often). I first looked into EMF XSD and then found Tuscany, and
> > it
> > > has looked very promising.
> > > 
> > > Except that I ran into the fact that namespaces cannot be altered
> once
> > > defined. Frank Budinsky came up with a solution where namespaces can
> > be
> > > extended, but the types that exist already in a namespace cannot be
> > > redefined.
> > > 
> > > Perhaps this scenario is way beyond the purpose of SDO, but besides
> > > these two issues I find it very useful to work with runtime xml
> > schemas.
> > > 
> > > So as you might guess I think an option to totally redefine
> namespaces
> > > or to extend them with new types and just overwrite the existing
> ones,
> > > would be fine.
> > > 
> > > This is in fact something I am trying to look into implement myself,
> > but
> > > at the understanding I'm at now I am having difficulties maneuvering
> > in
> > > the EMF. I have no idea where defined schemas are currently kept in
> > the
> > > VM and therefore don't know where to put in the code to allow types
> of
> > a
> > > namespace to be redefined.
> > > 
> > > Any pointers to where this code would go would be GREAT...
> > > 
> > > /Chr
> > > 
> > > -----Original Message-----
> > > From: kelvin goodson [mailto:[EMAIL PROTECTED] 
> > > Sent: 10. februar 2007 13:27
> > > To: tuscany-user@ws.apache.org
> > > Subject: Re: SDO (Types) Registry
> > > 
> > > Christian,
> > > 
> > >   unfortunately not.  The only open JIRA we have in this area is
> > > http://issues.apache.org/jira/browse/TUSCANY-761 for unregistering
> all
> > > the
> > > types in a namespace.  Perhaps we could collect together some info
> on
> > > what's
> > > really useful here and have some design discussions on how to handle
> > > type
> > > lifecycle.  There have previously been discussions on forming
> > > associations
> > > between HelperContexts so that one HC  can have dependencies on
> > > another/others.  This might allow for example dropping type
> > definitions
> > > by
> > > dropping all references to a given HelperContext.  It would be good
> to
> > > know
> > > exactly which operations would be the most valuable to you in order
> to
> > > help
> > > make good design decisions.
> > > 
> > > Regards, Kelvin.
> > > 
> > > 
> > > 
> > > On 10/02/07, Christian Landbo Frederiksen <
> > > [EMAIL PROTECTED]> wrote:
> > > >
> > > > Is there no way to 'undefine' types if you have to modify existing
> > > types?
> > > >
> > > > /Chr
> > > >
> > > > ________________________________
> > > >
> > > > From: Frank Budinsky [mailto:[EMAIL PROTECTED]
> > > > Sent: Fri 2/9/2007 5:10 PM
> > > > To: tuscany-user@ws.apache.org
> > > > Subject: RE: SDO (Types) Registry
> > > >
> > > >
> > > >
> > > > If the requirement is just to add new types to a namespace, as
> > opposed
> > > to
> > > > modifying existing types (which is nasty), I don't think it would
> be
> > > hard
> > > > to add this support.
> > > >
> > > > This is open source, maybe you want to help :-)
> > > >
> > > > Initially, I would suggest adding a new instance variable in
> > > XSDHelperImpl
> > > > - extensibleNamespaces (false by default, but can be set to true)
> -
> > > and
> > > > then change this line in XSDHelperImpl.define():
> > > >
> > > >         if (ePackage == null || TypeHelperImpl.getBuiltInModels
> > > > ().contains(ePackage))
> > > >
> > > > to this:
> > > >
> > > >         if (extensibleNamespaces || ePackage == null ||
> > > TypeHelperImpl.
> > > > getBuiltInModels().contains(ePackage))
> > > >
> > > > Then, it's a matter of debugging to make sure that in
> > > SDOXSDEcoreBuilder,
> > > > when a type is requested that already exists, it just uses the
> > > existing
> > > > type and moves on. New types would get added in the usual way.
> > > >
> > > > I think this may be related to, and helped by, the work that will
> be
> > > done
> > > > in TUSCANY-1085 (not the patch provided by Fuhwei, but the proper
> > fix
> > > that
> > > > needs to be done), which needs to ensure that previously loaded
> > types
> > > are
> > > > found in SDOXSDEcoreBuilder.
> > > >
> > > > Frank.
> > > >
> > > >
> > > > "Christian Landbo Frederiksen"
> > > <[EMAIL PROTECTED]>
> > > > wrote on 02/09/2007 08:36:35 AM:
> > > >
> > > > > Hmmm. I just found this in the Dev list:
> > > > >
> > > > > "In the future, we may want to look at allowing new types to be
> > > added to
> > > > > an
> > > > > existing namespace, but currently that is not supported." -
> Frank
> > > > > Budinsky
> > > > >
> > > > > If this is not coming up real soon - is there a way to
> circumvent
> > > this
> > > > > using the underlying EMF or something?
> > > > >
> > > > >
> > > > > -----Original Message-----
> > > > > From: Christian Landbo Frederiksen
> > > > > [mailto:[EMAIL PROTECTED]
> > > > > Sent: 9. februar 2007 14:29
> > > > > To: tuscany-user@ws.apache.org
> > > > > Subject: RE: SDO (Types) Registry
> > > > >
> > > > > And then again - that way I can't define from my xsd.
> > > > >
> > > > > Dang. How do I solve this?
> > > > >
> > > > > /Chr
> > > > >
> > > > > -----Original Message-----
> > > > > From: Christian Landbo Frederiksen
> > > > > [mailto:[EMAIL PROTECTED]
> > > > > Sent: 9. februar 2007 14:27
> > > > > To: tuscany-user@ws.apache.org
> > > > > Subject: RE: SDO (Types) Registry
> > > > >
> > > > > I have just run into calling define(...) for a schema with
> > namespace
> > > > > that has already been defined by another schema does NOT add the
> > > types
> > > > > from the new schema.
> > > > >
> > > > > I suppose I have to register each seperately on its own
> > typehelper?
> > > > >
> > > > > Is there a way to see if a namespace is already defined?
> > > > >
> > > > > /Chr
> > > > >
> > > > > -----Original Message-----
> > > > > From: Yang ZHONG [mailto:[EMAIL PROTECTED]
> > > > > Sent: 27. januar 2007 20:15
> > > > > To: tuscany-user@ws.apache.org
> > > > > Subject: Re: SDO (Types) Registry
> > > > >
> > > > > SDO spec seems not addressing the issues yet, here's what I know
> > for
> > > > > Tuscany
> > > > > implementation.
> > > > >
> > > > > 1. connection between XSDHelper#define and XMLHelper#load
> > > > >   The assumption is right: XSDHelper#define stores Types into
> > > > > (Package/Types) Registry and XMLHelper#load uses the Types from
> > > > > the (Package/Types) Registry
> > > > >
> > > > > 2. How XMLHelper#load uses Types
> > > > >   Assuming a XML:
> > > > >   <root:stock xmlns:root="NS" ...
> > > > >   XMLHelper#load looks for the Type of the global Property with
> > > > > NameSpace
> > > > > "NS" and name "stock", and uses the Type to create DataObject
> > > instance
> > > > > then
> > > > > loads the rest of the XML.
> > > > >   The Type can be dynamic from XSDHelper#define, where the
> > > DataObject is
> > > > > an
> > > > > instance of DataObjectImpl.
> > > > >   The Type can also be static from code generation, where the
> > > DataObject
> > > > > is
> > > > > an instance of generated class such as MyStock.
> > > > >   If no Type available, XMLHelper#load creates an instance of
> > > > > AnyTypeDataObject and loads data without any metadata.
> > > > >
> > > > > 3. (Package/Types) Registry Garbage Collection
> > > > >   Types are weakly referenced by ClassLoader. If a (J2EE)
> > > application
> > > > > stops,
> > > > > Types can be Garbage Collected unless a system library (live
> > > > > ClassLoader)
> > > > > holds a strong reference.
> > > > >
> > > > > 4. (Package/Types) Registry Thread Safety
> > > > >   No Thread Safety for the moment. However it could be done; the
> > > > > previous
> > > > > SDO implementation I worked on supports Thread Safety for
> example.
> > > > >
> > > > > 5. Two XSDHelper#define for same XSD(s)
> > > > >   The later one overwrites the earlier one if same
> > > > > scope/application/ClassLoader. If concurrent, slower thread
> "wins"
> > > :-)
> > > > >   If different scope/application/ClassLoader, multiple copies
> for
> > > the
> > > > > moment. However it could be optimized to save both storage and
> > > > > defining/loading time; the previous SDO implementation I worked
> on
> > > > > defines/loads same XSD(s) only once if no modification and makes
> > > Types
> > > > > available to multiple scopes/applications/ClassLoaders, for
> > example.
> > > > >
> > > > > On 1/27/07, Christian Landbo Frederiksen <
> > > > > [EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > I was wondering what goes on in the background, since SDO can
> be
> > > used
> > > > > > the way is is used.
> > > > > >
> > > > > > In the example:
> > > > > >
> > > > >
> > >
> >
> org.apache.tuscany.samples.sdo.specCodeSnippets.CreateDataObjectFromXsdA
> > > > > > ndXmlFiles
> > > > > >
> > > > > > types are defined in one static method like this:
> > > > > > XSDHelper.INSTANCE.define(is, null);
> > > > > >
> > > > > > and then in another static method xml is loaded: XMLDocument
> > > xmlDoc =
> > > > > > XMLHelper.INSTANCE.load(is);
> > > > > >
> > > > > > What is the connection between these two separate method
> > > invocations?
> > > > > > How does the loading of xml use the types defined above? I
> > assume
> > > > > > something is stored somewhere but how does this relate to
> > garbage
> > > > > > collection and thread safety? I meas somebody could call
> > > > > > XSDHelper.INSTANCE.define(is, null); with another xsd
> somewhere
> > > else
> > > > > in
> > > > > > the same VM?
> > > > > >
> > > > > > /Chr
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Yang ZHONG
> > > > >
> > > > >
> > >
> ---------------------------------------------------------------------
> > > > > 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]
> > > > >
> > > >
> > > >
> > > >
> > ---------------------------------------------------------------------
> > > > 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]
> > > 
> > 
> > 
> > ---------------------------------------------------------------------
> > 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]
> 
> 
> 
> ---------------------------------------------------------------------
> 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]
> 


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

Reply via email to