No, it seems the accessible value isn't persistent -- a subsequent call to
getDeclaredMethods will return an object without the flag set.  But I can
hack on WO to fix it.  Maybe this could go into Wonder?

// In Application's constructor

        try {

        Field field = WOWSDDRegistrar.class.getDeclaredField("_instance");

        field.setAccessible(true);

        field.set(WOWSDDRegistrar.class, new FixedWOWSDDRegistrar());

        } catch (Exception e) {

        log.error("Unable to patch WOWSDDRegistrar: " + e.getMessage());

        }



// New class

import java.lang.reflect.Method;

import java.lang.reflect.Modifier;

import java.util.ArrayList;

import java.util.List;


import com.webobjects.appserver.WOWSDDRegistrar;


public class FixedWOWSDDRegistrar extends WOWSDDRegistrar {


 protected List<String> getDeclaredMethodsForClass(Class<?> clazz) {

List<String> result = new ArrayList<String>();

for (Method method : clazz.getDeclaredMethods()) {

if (Modifier.isPublic(method.getModifiers()) &&
Modifier.isStatic(method.getModifiers())) {

result.add(method.getName());

}

}

return result;

}}

 }


On Tue, Jan 4, 2011 at 11:12 AM, Mike Schrag <[email protected]> wrote:

> if you Main.class.getMethod("yourMethod").setAccessible(true)
> it will probably work
>
> On Jan 4, 2011, at 12:11 PM, John Huss wrote:
>
> Ok, so it's use in WOWSDDRegistrar.getDeclaredMethodsForClass is incorrect
> then, and that's why I can't create a Document style web service.  I love WO
> 5.4!  I'll file a radar.
>
> Thanks,
> John
>
> On Tue, Jan 4, 2011 at 11:03 AM, Mike Schrag <[email protected]> wrote:
>
>> I don't think that means what you think it does ... isAccessible only
>> returns true if you setAccessible, which tells the VM to skip VM security
>> checks when you call the method.
>>
>> You might want Modifier.isPublic(method.getModifiers()) ?
>>
>> ms
>>
>> On Jan 4, 2011, at 11:58 AM, John Huss wrote:
>>
>> Does anyone know why this code doesn't print anything?
>>
>> import java.lang.reflect.Method;
>>
>> public class Main {
>>
>> public static void main(String[] args) {
>>  for (Method method : Main.class.getDeclaredMethods()) {
>>  if (method.isAccessible()) {
>>  System.out.println(method.getName());
>> }
>>  }
>> }
>>
>> }
>>
>> I would expect it to print "main" since there is one public method named
>> "main" in class Main.  Isn't that what isAccessible does?
>>
>> John
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40pobox.com
>>
>> This email sent to [email protected]
>>
>>
>>
>
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to