Just a guess: Should the relevant part of the diff not looke like
this?
public String getUsersPath() {
- return usersPath;
+ // TODO: get rid of user_collection parameter
+ if (resolvedUsersPath == null) {
+ if (usersPath == null || "/".equals(usersPath)) {
+ resolvedUsersPath = "";
+ }
+ else {
+ resolvedUsersPath = usersPath;
+ String ucoll = getParameter("user_collection");
+ if (ucoll != null && ucoll.length() > 0) {
+ if (!ucoll.startsWith("/")) {
+ ucoll = "/"+ucoll;
+ }
+ resolvedUsersPath += ucoll;
+ }
+ }
+ }
+ return resolvedUsersPath;
+ }
Regards,
Ingo
> There seems to be a bug in NamespaceConfig.getUsersPath(). It returns
> null in initialization:
>
> Thread [main] (Suspended (breakpoint at line 860 in SecurityImpl))
> SecurityImplAllGrant(SecurityImpl).getPrincipal(SlideToken) line: 860
> SecurityImplAllGrant(SecurityImpl).hasPermission(SlideToken,
> ObjectNode, ActionNode) line: 686
> SecurityImplAllGrant(SecurityImpl).checkPermission(SlideToken,
> ObjectNode, ActionNode) line: 469
> SecurityImplAllGrant(SecurityImpl).checkCredentials(SlideToken,
> ObjectNode, ActionNode) line: 405
> SecurityImplAllGrant(SecurityImpl).grantPermission(SlideToken,
> NodePermission) line: 255
> XMLUnmarshaller.loadObjectNode(NamespaceAccessToken, SlideToken,
> Configuration) line: 250
> XMLUnmarshaller.unmarshal(NamespaceAccessToken, SlideToken,
> Configuration) line: 126
> NamespaceAccessTokenImpl.importData(SlideToken, Configuration) line: 317
> Namespace.loadBaseData(Configuration) line: 816
> Domain.initNamespace(Configuration) line: 860
> Domain.init(Configuration) line: 479
> Domain.selfInit() line: 793
> Domain.accessNamespace(SecurityToken, String) line: 278
> SlideRealm.start() line: 218
> StandardEngine(ContainerBase).start() line: 1173
> StandardEngine.start() line: 347
> StandardService.start() line: 497
> StandardServer.start() line: 2190
> Catalina.start() line: 512
> Catalina.execute() line: 400
> Catalina.process(String[]) line: 180
> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
> available [native method]
> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 [local
> variables unavailable]
> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 [local
> variables unavailable]
> Method.invoke(Object, Object[]) line: 324 [local variables unavailable]
> Bootstrap.main(String[]) line: 203
>
> This leads to the URI-String null// which will be resolved to null. This
> is certainly not a valid uri, but is furtheron used to retrieve and
> store subjectUri.
>
> Unfortunately, I have no idea how to fix this...
>
> Oliver
>
> [EMAIL PROTECTED] wrote:
>
> > pnever 2003/10/20 05:38:17
> >
> > Modified: src/webdav/server/org/apache/slide/webdav/method
> > AclMethod.java ReportMethod.java LockMethod.java
> > src/share/org/apache/slide/lock LockImpl.java
> > src/share/org/apache/slide/common NamespaceConfig.java
> > src/share/org/apache/slide/security SecurityImpl.java
> > src/share/org/apache/slide/structure StructureImpl.java
> > src/webdav/server/org/apache/slide/webdav/util
> > PropertyHelper.java XMLValue.java
> > Log:
> > Refactoring:
> > users, groups and roles paths are controlled now solely by NamespaceConfig
> >
> > Revision Changes Path
> > 1.35 +4 -11
> > jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AclMethod.java
> >
> > Index: AclMethod.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AclMethod.java,v
> > retrieving revision 1.34
> > retrieving revision 1.35
> > diff -u -r1.34 -r1.35
> > --- AclMethod.java 18 Oct 2003 16:30:29 -0000 1.34
> > +++ AclMethod.java 20 Oct 2003 12:38:17 -0000 1.35
> > @@ -447,14 +447,7 @@
> > return "~";
> > }
> > else if (hasChild(principal, NamespaceCache.DEFAULT_NAMESPACE,
> > E_UNAUTHENTICATED)) {
> > - String userCollection = "/";
> > - String configParam =
> > token.getNamespaceConfig().getParameter(AclConstants.P_USER_COLLECTION);
> > - if ( configParam != null ) {
> > - if ( configParam.length() > 0 )
> > - userCollection = userCollection + configParam +"/";
> > - }
> > - return token.getNamespaceConfig().getUsersPath() + userCollection +
> > - token.getNamespaceConfig().getGuestPath();
> > + return
> > token.getNamespaceConfig().getUsersPath()+token.getNamespaceConfig().getGuestPath();
> > }
> > throw new JDOMException("<"+principal.getName()+"> element must
> > contain either a "+
> > "<"+E_HREF+">, "+
> >
> >
> >
> > 1.59 +4 -11
> > jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/ReportMethod.java
> >
> > Index: ReportMethod.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/ReportMethod.java,v
> > retrieving revision 1.58
> > retrieving revision 1.59
> > diff -u -r1.58 -r1.59
> > --- ReportMethod.java 13 Oct 2003 16:55:42 -0000 1.58
> > +++ ReportMethod.java 20 Oct 2003 12:38:17 -0000 1.59
> > @@ -1120,13 +1120,6 @@
> > char seperator = '/';
> > boolean self = false;
> >
> > - String userPrefix = "/";
> > - String configParam =
> > token.getNamespaceConfig().getParameter(AclConstants.P_USER_COLLECTION);
> > - if ( configParam != null ) {
> > - if ( configParam.length() > 0 )
> > - userpath = userpath + "/" + configParam +"/";
> > - }
> > -
> > currentUri = req.getRequestURI();
> > // check if self or principal-property is searched
> > if ((principalProperty.getName()).equalsIgnoreCase(E_SELF)) {
> >
> >
> >
> > 1.52 +5 -12
> > jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/LockMethod.java
> >
> > Index: LockMethod.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/LockMethod.java,v
> > retrieving revision 1.51
> > retrieving revision 1.52
> > diff -u -r1.51 -r1.52
> > --- LockMethod.java 18 Sep 2003 11:01:07 -0000 1.51
> > +++ LockMethod.java 20 Oct 2003 12:38:17 -0000 1.52
> > @@ -431,18 +431,11 @@
> > + (MAX_TIMEOUT * 1000));
> >
> > }
> > - String userCollection = "/";
> > - String configParam =
> > namespaceConfig.getParameter(AclConstants.P_USER_COLLECTION);
> > - if ( configParam != null ) {
> > - if ( configParam.length() > 0 )
> > - userCollection = "/" + configParam +"/";
> > - }
> >
> > SubjectNode credentialsSubject =
> > (SubjectNode) structure.retrieve
> > - (slideToken, namespaceConfig.getUsersPath() +
> > userCollection
> > - + slideToken.getCredentialsToken()
> > - .getPublicCredentials());
> > + (slideToken, namespaceConfig.getUsersPath()
> > +
> > +"/"+slideToken.getCredentialsToken().getPublicCredentials());
> >
> > NodeLock lockToken = null;
> >
> >
> >
> >
> > 1.35 +5 -16 jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java
> >
> > Index: LockImpl.java
> > ===================================================================
> > RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/lock/LockImpl.java,v
> > retrieving revision 1.34
> > retrieving revision 1.35
> > diff -u -r1.34 -r1.35
> > --- LockImpl.java 18 Oct 2003 16:30:29 -0000 1.34
> > +++ LockImpl.java 20 Oct 2003 12:38:17 -0000 1.35
> > @@ -410,22 +410,11 @@
> > private String computeSubjectUriFromPrincipal(SlideToken token) {
> >
> > String result;
> > - String configParam = namespaceConfig.getParameter("user_collection");
> > -
> > - String userCollection;
> > - if ( configParam != null && configParam.length() > 0) {
> > - userCollection = "/" + configParam;
> > - } else {
> > - userCollection = "/";
> > - }
> > -
> > -
> > String userId = token.getCredentialsToken().getPublicCredentials();
> > if (userId.equals("/")) userId = "";
> > else userId = "/" + userId;
> >
> > - result = namespaceConfig.getUsersPath() + userCollection + userId;
> > - // System.out.println("##### Subject URI = " + result);
> > + result = namespaceConfig.getUsersPath()+userId;
> > return result;
> > }
> >
> >
> >
> >
> > 1.30 +79 -6
> > jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java
> >
> > Index: NamespaceConfig.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java,v
> > retrieving revision 1.29
> > retrieving revision 1.30
> > diff -u -r1.29 -r1.30
> > --- NamespaceConfig.java 18 Oct 2003 16:30:29 -0000 1.29
> > +++ NamespaceConfig.java 20 Oct 2003 12:38:17 -0000 1.30
> > @@ -100,7 +100,15 @@
> >
> >
> > /** generic action nodes */
> > - public static final ActionNode DEFAULT_ACTION = new ActionNode();
> > + public static final ActionNode DEFAULT_ACTION = new ActionNode("default");
> > + public static final ActionNode ALL_ACTION = new ActionNode("all");
> > +
> > +
> > + /** generic subject nodes */
> > + public static final SubjectNode DEFAULT_SUBJECT = new
> > SubjectNode("default");
> > + public static final SubjectNode ALL_SUBJECT = new SubjectNode("all");
> > + public static final SubjectNode OWNER_SUBJECT = new SubjectNode("owner");
> > + public static final SubjectNode GUEST_SUBJECT = new SubjectNode("guest");
> >
> >
> > // ----------------------------------------------------- Instance Variables
> > @@ -226,6 +234,10 @@
> > */
> > protected String usersPath = null;
> >
> > + protected String resolvedUsersPath = null;
> > + protected String resolvedGroupsPath = null;
> > + protected String resolvedRolesPath = null;
> > +
> >
> > /**
> > * Guest user path.
> > @@ -500,7 +512,68 @@
> > * @return String Users path
> > */
> > public String getUsersPath() {
> > - return usersPath;
> > + // TODO: get rid of user_collection parameter
> > + if (resolvedUsersPath == null) {
> > + if (usersPath == null || "/".equals(usersPath)) {
> > + resolvedUsersPath = "";
> > + }
> > + else {
> > + String ucoll = getParameter("user_collection");
> > + if (ucoll != null && ucoll.length() > 0) {
> > + if (!ucoll.startsWith("/")) {
> > + ucoll = "/"+ucoll;
> > + }
> > + resolvedUsersPath = usersPath+ucoll;
> > + }
> > + }
> > + }
> > + return resolvedUsersPath;
> > + }
> > +
> > + /**
> > + * Groups path accessor.
> > + *
> > + * @return String Groups path
> > + */
> > + public String getGroupsPath() {
> > + if (resolvedGroupsPath == null) {
> > + if (usersPath == null || "/".equals(usersPath)) {
> > + resolvedGroupsPath = "";
> > + }
> > + else {
> > + String gcoll = getParameter("group_collection");
> > + if (gcoll != null && gcoll.length() > 0) {
> > + if (!gcoll.startsWith("/")) {
> > + gcoll = "/"+gcoll;
> > + }
> > + resolvedGroupsPath = usersPath+gcoll;
> > + }
> > + }
> > + }
> > + return resolvedGroupsPath;
> > + }
> > +
> > + /**
> > + * Roles path accessor.
> > + *
> > + * @return String Roles path
> > + */
> > + public String getRolesPath() {
> > + if (resolvedRolesPath == null) {
> > + if (usersPath == null || "/".equals(usersPath)) {
> > + resolvedRolesPath = "";
> > + }
> > + else {
> > + String rcoll = getParameter("role_collection");
> > + if (rcoll != null && rcoll.length() > 0) {
> > + if (!rcoll.startsWith("/")) {
> > + rcoll = "/"+rcoll;
> > + }
> > + resolvedRolesPath = usersPath+rcoll;
> > + }
> > + }
> > + }
> > + return resolvedRolesPath;
> > }
> >
> >
> >
> >
> >
> > 1.39 +5 -12
> > jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java
> >
> > Index: SecurityImpl.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java,v
> > retrieving revision 1.38
> > retrieving revision 1.39
> > diff -u -r1.38 -r1.39
> > --- SecurityImpl.java 18 Oct 2003 16:30:29 -0000 1.38
> > +++ SecurityImpl.java 20 Oct 2003 12:38:17 -0000 1.39
> > @@ -857,15 +857,8 @@
> > principalPath = namespaceConfig.getGuestPath();
> > }
> >
> > - String userPrefix = "/";
> > - String configParam = namespaceConfig.getParameter("user_collection");
> > - if ( configParam != null ) {
> > - if ( configParam.length() > 0 )
> > - userPrefix = "/" + configParam +"/";
> > - }
> > -
> > Uri subjectUri = namespace.getUri
> > - (token, namespaceConfig.getUsersPath() + userPrefix +
> > principalPath);
> > + (token, namespaceConfig.getUsersPath()+"/"+principalPath);
> >
> > try {
> > return subjectUri.getStore().retrieveObject(subjectUri);
> >
> >
> >
> > 1.34 +6 -6
> > jakarta-slide/src/share/org/apache/slide/structure/StructureImpl.java
> >
> > Index: StructureImpl.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/share/org/apache/slide/structure/StructureImpl.java,v
> > retrieving revision 1.33
> > retrieving revision 1.34
> > diff -u -r1.33 -r1.34
> > --- StructureImpl.java 17 Oct 2003 16:47:26 -0000 1.33
> > +++ StructureImpl.java 20 Oct 2003 12:38:17 -0000 1.34
> > @@ -374,8 +374,8 @@
> > // object in the configuration files.
> > // This would then be the default behavior.
> > NodePermission grantedPermission = null;
> > - String userUri = namespaceConfig.getUsersPath() + "/"
> > - + token.getCredentialsToken().getPublicCredentials();
> > + String userUri = namespaceConfig.getUsersPath()
> > + +"/"+token.getCredentialsToken().getPublicCredentials();
> > Domain.debug("Checking basic permissions on new object");
> > /*
> > try {
> >
> >
> >
> > 1.56 +29 -53
> > jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/PropertyHelper.java
> >
> > Index: PropertyHelper.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/PropertyHelper.java,v
> > retrieving revision 1.55
> > retrieving revision 1.56
> > diff -u -r1.55 -r1.56
> > --- PropertyHelper.java 16 Oct 2003 10:01:07 -0000 1.55
> > +++ PropertyHelper.java 20 Oct 2003 12:38:17 -0000 1.56
> > @@ -1076,20 +1076,31 @@
> > List excludeList = new ArrayList();
> >
> > String usersPath =
> > truncateLeadingSlash(nsaToken.getNamespaceConfig().getUsersPath());
> > - Element excludeElement = new Element(DaslConstants.E_EXCLUDE,
> > NamespaceCache.SLIDE_NAMESPACE);
> > - excludeElement.setText(usersPath);
> > - excludeList.add(excludeElement);
> > + addExcludeElement(usersPath, excludeList);
> > +
> > + String groupsPath =
> > truncateLeadingSlash(nsaToken.getNamespaceConfig().getGroupsPath());
> > + addExcludeElement(groupsPath, excludeList);
> > +
> > + String rolesPath =
> > truncateLeadingSlash(nsaToken.getNamespaceConfig().getRolesPath());
> > + addExcludeElement(rolesPath, excludeList);
> >
> > Iterator historyPathIterator =
> > HistoryPathHandler.getHistoryPathHandler().getResolvedHistoryPaths().iterator();
> > while (historyPathIterator.hasNext()) {
> > - excludeElement = new Element(DaslConstants.E_EXCLUDE,
> > NamespaceCache.SLIDE_NAMESPACE);
> > -
> > excludeElement.setText(truncateLeadingSlash(historyPathIterator.next().toString()));
> > - excludeList.add(excludeElement);
> > + String path =
> > truncateLeadingSlash(historyPathIterator.next().toString());
> > + addExcludeElement(path, excludeList);
> > }
> >
> > return excludeList;
> > }
> >
> > + private void addExcludeElement(String path, List excludeList) {
> > + if (path != null && path.length() > 0) {
> > + Element excludeElement = new Element(DaslConstants.E_EXCLUDE,
> > NamespaceCache.SLIDE_NAMESPACE);
> > + excludeElement.setText(path);
> > + excludeList.add(excludeElement);
> > + }
> > + }
> > +
> > /**
> > * Returns an XMLValue containing <code><href></code> elements
> > * with the URI of the VCRs in the workspace identified the given
> > @@ -2040,44 +2051,15 @@
> > * @throws JDOMException
> > */
> > public XMLValue computePrincipalCollectionSet(NodeRevisionDescriptors
> > revisionDescriptors, NodeRevisionDescriptor revisionDescriptor, String
> > contextPath, String serverURL) throws ObjectLockedException,
> > RevisionDescriptorNotFoundException, ServiceAccessException,
> > LinkedObjectNotFoundException, AccessDeniedException, ObjectNotFoundException,
> > LockTokenNotFoundException, JDOMException {
> > -
> > XMLValue xmlValue = new XMLValue();
> > -
> > - NamespaceConfig config = nsaToken.getNamespaceConfig();
> > - Element href;
> > - String userCollStr = config.getParameter(P_USER_COLLECTION);
> > - String groupCollStr = config.getParameter(P_GROUP_COLLECTION);
> > - String roleCollStr = config.getParameter(P_ROLE_COLLECTION);
> > - if (userCollStr != null && userCollStr.length() > 0) {
> > - if (!userCollStr.startsWith("/")) {
> > - userCollStr = "/"+userCollStr;
> > - }
> > - href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
> > - href.setText(getAbsoluteURL(null, contextPath,
> > config.getUsersPath()+userCollStr));
> > - xmlValue.add(href);
> > - if (groupCollStr != null && groupCollStr.length() > 0) {
> > - if (!groupCollStr.startsWith("/")) {
> > - groupCollStr = "/"+groupCollStr;
> > - }
> > - href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
> > - href.setText(getAbsoluteURL(null, contextPath,
> > config.getUsersPath()+groupCollStr));
> > - xmlValue.add(href);
> > - }
> > - if (roleCollStr != null && roleCollStr.length() > 0) {
> > - if (!roleCollStr.startsWith("/")) {
> > - roleCollStr = "/"+roleCollStr;
> > - }
> > - href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
> > - href.setText(getAbsoluteURL(null, contextPath,
> > config.getUsersPath()+roleCollStr));
> > - xmlValue.add(href);
> > - }
> > + NamespaceConfig namespaceConfig = nsaToken.getNamespaceConfig();
> > + xmlValue.addHref(getAbsoluteURL(null, contextPath,
> > namespaceConfig.getUsersPath()));
> > + if (namespaceConfig.getGroupsPath() != null) {
> > + xmlValue.addHref(getAbsoluteURL(null, contextPath,
> > namespaceConfig.getGroupsPath()));
> > }
> > - else {
> > - href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
> > - href.setText(getAbsoluteURL(null, contextPath,
> > config.getUsersPath()));
> > - xmlValue.add(href);
> > + if (namespaceConfig.getRolesPath() != null) {
> > + xmlValue.addHref(getAbsoluteURL(null, contextPath,
> > namespaceConfig.getRolesPath()));
> > }
> > -
> > return xmlValue;
> > }
> >
> > @@ -2130,23 +2112,17 @@
> > XMLValue xmlValue = new XMLValue();
> > String userHref;
> > NamespaceConfig config = nsaToken.getNamespaceConfig();
> > - String userCollection = config.getParameter(USER_COLLECTION);
> > if ((userProperty != null) && (userProperty.getValue()!=null) &&
> > (!"".equals(userProperty.getValue().toString()))) {
> >
> > - if (userCollection == null){
> > - userHref = contextPath + config.getUsersPath() + "/" +
> > userProperty.getValue().toString();
> > - } else {
> > - userHref = contextPath + config.getUsersPath() + "/" +
> > userCollection + "/" + userProperty.getValue().toString();
> > - }
> > + userHref = contextPath + config.getUsersPath() + "/" +
> > userProperty.getValue().toString();
> > +
> > } else {
> > userHref = contextPath + config.getUsersPath();
> > if ( config.getGuestPath() != null &&
> > !config.getGuestPath().equals("") )
> > userHref = userHref + "/" + config.getGuestPath();
> > }
> > - Element href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
> > - href.setText(userHref);
> > - xmlValue.add(href);
> > + xmlValue.addHref(userHref);
> > return xmlValue;
> > }
> >
> >
> >
> >
> > 1.13 +20 -10
> > jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/XMLValue.java
> >
> > Index: XMLValue.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/XMLValue.java,v
> > retrieving revision 1.12
> > retrieving revision 1.13
> > diff -u -r1.12 -r1.13
> > --- XMLValue.java 14 Aug 2003 14:41:45 -0000 1.12
> > +++ XMLValue.java 20 Oct 2003 12:38:17 -0000 1.13
> > @@ -69,6 +69,7 @@
> > import java.util.ArrayList;
> > import java.util.Iterator;
> > import java.util.List;
> > +import org.apache.slide.content.NodeProperty;
> > import org.jdom.CDATA;
> > import org.jdom.Comment;
> > import org.jdom.Document;
> > @@ -93,13 +94,13 @@
> > *
> > * @author <a href="mailto:[EMAIL PROTECTED]">Ralf Stuckert</a>
> > **/
> > -public class XMLValue implements Cloneable, Comparable {
> > +public class XMLValue implements Cloneable, Comparable, WebdavConstants {
> >
> > /**
> > * Constant for the message of the IllegalArgumentException that may be
> > * thrown in method [EMAIL PROTECTED] #add add()}.
> > */
> > -
> > +
> > public static final String ELEMENT_MUST_NOT_BE_NULL = "'null' Element is
> > not allowed";
> >
> > /**
> > @@ -299,7 +300,10 @@
> > Iterator iterator = content.iterator();
> > while (iterator.hasNext()) {
> > Object o = iterator.next();
> > - if( o instanceof Element ) {
> > + if( o == null ) {
> > + throw new
> > IllegalArgumentException(ELEMENT_MUST_NOT_BE_NULL);
> > + }
> > + else if( o instanceof Element ) {
> > add((Element)o);
> > }
> > else if( o instanceof Text ) {
> > @@ -377,6 +381,12 @@
> > }
> > }
> >
> > + public void addHref(String path) {
> > + Element href = new Element(E_HREF,
> > NodeProperty.NamespaceCache.DEFAULT_NAMESPACE);
> > + href.setText(path);
> > + add(href);
> > + }
> > +
> > /**
> > * Returns an iterator of JDOM Elements.
> > *
> > @@ -558,7 +568,7 @@
> > String getTextValue() {
> > Iterator it = elementList.iterator();
> > StringBuffer sb = new StringBuffer();
> > -
> > +
> > while (it.hasNext()) {
> > Object o = it.next();
> > if (o instanceof Element) {
> > @@ -567,7 +577,7 @@
> > }
> > return sb.toString();
> > }
> > -
> > +
> > /**
> > * compares the concatenated Text values of all Elements in elementList
> > *
> > @@ -577,7 +587,7 @@
> > *
> > */
> > public int compareTo (Object o) {
> > -
> > +
> > String s1 = getTextValue();
> > String s2 = ((XMLValue)o).getTextValue();
> > return s1.compareTo (s2);
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > 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]