commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kenneth Petersen <kpeter...@travis.com>
Subject RE: Customizing JXPath. Custom Containers.
Date Mon, 14 Oct 2002 06:07:15 GMT
Hi.

After having used a little time looking at the code of package
org.apache.commons.jxpath.ri.model, I have come to the following conclusion:

When taking into account that the "only difference" between a bean like
object and value-objects created by Castor, is that the later defines many
different kinds of "Collections". That is every time a property named
xxxChoice of bean named xxx, the properties of the type of xxxChoice is to
be considered as being part of bean xxx.
 
I am guessing that all children of a BeanPointer are created using factory
method NodePointer.newChildNodePointer(NodePointer, QName, Object). Hence I
could achieve the desired result by adding a new kind of BeanPointerFactory.
This Factory should be invoked before any of the existing Factories. Where
are new Factories added?

Before beginning to extend the existing bean model, I would very much like
an understanding of the following:
·	When is the NodePointer tree describing the content of a bean
instance actually created? Is it when JXPathContext.newContext(Object) is
invoked?
·	What is the entry-point of the model package when the NodePointer
tree is created?

I am sorry for all the questions, but am hoping for an answer.


Best regards
Kenneth Petersen

> Kenneth,
> 
> There is no separate document for this, but there are several 
> examples:
> see all classes in the ..jxpath.ri.model subtree - you have there
> implementations for beans, DOM, JDOM, collections, containers etc.
> 
> - Dmitri
> 
> 
> --- Kenneth Petersen <kpetersen@travis.com> wrote:
> > Dmitri,
> > 
> > It is not possible to change the code generated by Castor. Therefore
> > I will
> > try to implement
> > a NodePointer-NodeIterator-NodePointerFactory. Are there 
> any examples
> > or
> > documentation that
> > may help me in this endeavour.
> > 
> > Best Regards
> > Kenneth Petersen
> > 
> > > Kenneth,
> > > 
> > > I am not familiar with Castor enough to give you specific
> > > recommendations, but here are some general ideas.
> > > 
> > > 1. The mapping of paths to objects in JXPath is based on the
> > JavaBean
> > > specification.  So, I guess I would first look into flattening
> > > properties to make the beans conform strictly to the JavaBean 
> > > spec. For
> > > example, if Request had a method like
> > > 
> > > public Errors getErrors(){
> > >    return getRequestChoice().getErrors();
> > > }
> > > 
> > > you could get the Errors object (or null) with the
> > "/request/errors"
> > > path.
> > > 
> > > 2. If adding code to the Castor-genned classes is not an option,
> > you
> > > might consider writing a
> > NodePointer-NodeIterator-NodePointerFactory
> > > familiy of classes for specific support of Castor-style objects. 
> > This
> > > may be a little involved, as APIs of those classes, especially
> > > NodePointer, are rather wide.  You might be able to inherit your
> > > implementations from BeanPointer, etc, thus re-using some of the
> > > JavaBean support for the Castor object.
> > > 
> > > Let me know if any of this helps.
> > > 
> > > - Dmitri
> > > 
> > > 
> > > --- Kenneth Petersen <kpetersen@travis.com> wrote:
> > > > Hi. 
> > > > 
> > > > I am using Castor for creating java objects capable of 
> containing
> > > > data
> > > > conforming to certain xsd-schemas. When using Castor to 
> > > create a java
> > > > structure capable of containing data of xml entities following
> > > > schema:
> > > > 
> > > > 	<xs:element name="Request">
> > > > 		<xs:complexType>
> > > > 			<xs:sequence>
> > > > 				<xs:choice>
> > > > 					<xs:element 
> name="Success"
> > > > type="SuccessType"/>
> > > > 					<xs:element 
> name="Errors"
> > > > type="ErrorsType"/>
> > > > 				</xs:choice>
> > > > 			</xs:sequence>
> > > > 		</xs:complexType>
> > > > 	</xs:element>
> > > > 
> > > > Castor creates a "Request" class containing a "RequestChoice"
> > > > container
> > > > containing either a "Success" or "Errors" object.
> > > > 
> > > > I would like to use JXPath to access the data of the 
> java objects
> > > > using
> > > > X-Path expressions identifying values of the original 
> xml-entity.
> > > > Taking the
> > > > example from before, I would like to use expression 
> > > "/Request/Errors"
> > > > to
> > > > access the "Errors" children of an xml-entity. I am not capable
> > of
> > > > doing
> > > > this without being able to configure JXPath so that 
> properties of
> > > > classes
> > > > "Xxx" following the naming pattern "XxxChoice" are identifies as
> > > > being
> > > > containers. Is this at all possible? If so some clues as to how
> > this
> > > > is
> > > > accomplished would be much appreciated.
> > > > 
> > > > Best Regards
> > > > Kenneth Petersen
> > > > 
> > > > 
> > > > --
> > > > To unsubscribe, e-mail:  
> > > > <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> > > > For additional commands, e-mail:
> > > > <mailto:commons-dev-help@jakarta.apache.org>
> > > > 
> > > 
> > > 
> > > __________________________________________________
> > > Do you Yahoo!?
> > > Faith Hill - Exclusive Performances, Videos & More
> > > http://faith.yahoo.com
> > > 
> > > --
> > > To unsubscribe, e-mail:   
> > > <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> > > For additional commands, e-mail: 
> > > <mailto:commons-dev-help@jakarta.apache.org>
> > > 
> > 
> > --
> > To unsubscribe, e-mail:  
> > <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> > For additional commands, e-mail:
> > <mailto:commons-dev-help@jakarta.apache.org>
> > 
> 
> 
> __________________________________________________
> Do you Yahoo!?
> Faith Hill - Exclusive Performances, Videos & More
> http://faith.yahoo.com
> 
> --
> To unsubscribe, e-mail:   
> <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: 
> <mailto:commons-dev-help@jakarta.apache.org>
> 

--
To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>


Mime
View raw message