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]