out of memory error

hi

i get an "Out of memory" error. I use string buffer. how can i solve this.
results is an instance of NamingEnumeration
my code:

StringBuffer sb = new StringBuffer();
while (results.hasMore()) {
//SearchResult res = (SearchResult) results.next();
//Attributes attrs = res.getAttributes();
if (results.hasMore())
sb.append(attrs1.get("member").toString().substring(4) + ",");
else
sb.append(attrs1.get("member").toString().substring(4));
}
System.out.println(sb.toString());

thnx in advance
sb
ScarletBlueAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

girionisCommented:
 At a first glance you do not seem to get the next object of the result so it loops forever.
girionisCommented:
 You need to call results.next();
TimYatesCommented:
StringBuffer sb = new StringBuffer();
while( true )
{
    SearchResult res = (SearchResult) results.next();
    Attributes attrs = res.getAttributes();
    if (results.hasMore())
        sb.append(attrs1.get("member").toString().substring(4) + ",");
    else
    {
        sb.append(attrs1.get("member").toString().substring(4));
        break ;
    }
}
System.out.println(sb.toString());


or something...
OWASP: Avoiding Hacker Tricks

Learn to build secure applications from the mindset of the hacker and avoid being exploited.

grim_toasterCommented:
Your code looked as if you were getting there.  Your commented out lines of code are what you will need, plus with one other small change (use attrs instead of attrs1):

StringBuffer sb = new StringBuffer();
while (results.hasMore()) {
SearchResult res = (SearchResult) results.next();
Attributes attrs = res.getAttributes();
if (results.hasMore())
sb.append(attrs.get("member").toString().substring(4) + ",");
else
sb.append(attrs.get("member").toString().substring(4));
}
System.out.println(sb.toString());
 
TimYatesCommented:
> (use attrs instead of attrs1):

That's the bit I missed...heh
ScarletBlueAuthor Commented:
hi  grim_toaster

When i do put in the commented out lines in...it gives me this error
                java.lang.ClassCastException: java.lang.String
      at com.sasol.iview.LDAPLookup.main(LDAPLookup.java:43)

this error is pointing to SearchResult res = (SearchResult) results.next();

can u help with this
sb
girionisCommented:
 The object you are receiving is probably of type String, therefore you need to cast it into String instead of SearchResults.

ScarletBlueAuthor Commented:
I have changed it a bit and this seems to work. It brings back the results I want...
but I got a feeling im doin something wrong.
Do you gurus see anything wrong with this.

DirContext dctx = new InitialDirContext(env);
Attributes attrs = dctx.getAttributes("CN=SAPPortal-Sec-Prod-Admin,OU=SAPPortal Groups,OU=Groups,OU=Core,DC=sasol,DC=com");
StringBuffer sb = new StringBuffer();
while (results.hasMore()) {
if (results.hasMore()){
sb.append(attrs.get("member").toString().substring(4) + ",");
break;
}
results.next();
}
System.out.println(sb.toString());
girionisCommented:
 It looks fine to me apart from this statement:

> break;

  Why do you have it there?
ScarletBlueAuthor Commented:
its weird , if i take out the break...it returns the string about 4/5 times...so I would have duplicate results.
when i add in the break..it returns the string just once.


girionisCommented:
 Yes because you enter the if loop as long as there are more results.
grim_toasterCommented:
As a question, why do you actually need your loop?  As you are getting the Attributes object outside of the loop, and then reading the same value from it each time.  So the below should work:

DirContext dctx = new InitialDirContext(env);
Attributes attrs = dctx.getAttributes("CN=SAPPortal-Sec-Prod-Admin,OU=SAPPortal Groups,OU=Groups,OU=Core,DC=sasol,DC=com");
System.out.println(attrs.get("member").toString().substring(4));

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
ScarletBlueAuthor Commented:
i dont know why i needed the loop either...
thanx grim_toaster, your suggested code works.

thanx for everyone's help

have a great day
scarlet
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.