Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package test.javassist.proxy;
  2. import java.lang.reflect.Method;
  3. import javassist.util.proxy.ProxyFactory;
  4. import javassist.util.proxy.MethodHandler;
  5. import javassist.util.proxy.MethodFilter;
  6. import javassist.util.proxy.ProxyObject;
  7. import javassist.util.proxy.Proxy;
  8. import junit.framework.TestCase;
  9. @SuppressWarnings({"rawtypes","unchecked"})
  10. public class JBPAPP9257Test extends TestCase {
  11. public void testGetHandler() throws Exception {
  12. ProxyFactory f = new ProxyFactory();
  13. f.setSuperclass(Foo.class);
  14. f.setFilter(new MethodFilter() {
  15. public boolean isHandled(Method m) {
  16. // ignore finalize()
  17. return !m.getName().equals("finalize");
  18. }
  19. });
  20. Class c = f.createClass();
  21. MethodHandler mi = new MethodHandler() {
  22. public Object invoke(Object self, Method m, Method proceed,
  23. Object[] args) throws Throwable {
  24. System.out.println("Name: " + m.getName());
  25. return proceed.invoke(self, args) + "!"; // execute the original
  26. // method.
  27. }
  28. };
  29. Foo foo = (Foo)c.getConstructor().newInstance();
  30. try {
  31. ((ProxyObject)foo).setHandler(mi);
  32. fail("foo is a ProxyObject!");
  33. } catch (ClassCastException e) {}
  34. ((Proxy)foo).setHandler(mi);
  35. assertEquals("I'm doing something!", foo.doSomething());
  36. assertEquals("This is a secret handler!", foo.getHandler());
  37. }
  38. public void testGetHandler2() throws Exception {
  39. ProxyFactory f = new ProxyFactory();
  40. f.setSuperclass(Foo2.class);
  41. f.setFilter(new MethodFilter() {
  42. public boolean isHandled(Method m) {
  43. // ignore finalize()
  44. return !m.getName().equals("finalize");
  45. }
  46. });
  47. Class c = f.createClass();
  48. MethodHandler mi = new MethodHandler() {
  49. public Object invoke(Object self, Method m, Method proceed,
  50. Object[] args) throws Throwable {
  51. System.out.println("Name: " + m.getName());
  52. return proceed.invoke(self, args) + "!"; // execute the original
  53. // method.
  54. }
  55. };
  56. Foo2 foo = (Foo2)c.getConstructor().newInstance();
  57. try {
  58. ((ProxyObject)foo).setHandler(mi);
  59. fail("foo is a ProxyObject!");
  60. } catch (ClassCastException e) {}
  61. ((Proxy)foo).setHandler(mi);
  62. assertEquals("do something!", foo.doSomething());
  63. assertEquals("return a string!", foo.getHandler());
  64. }
  65. }