A DeobfuscatorBuilder must be named the same as your RequestFactory 
(including same package) suffixed with "DeobfuscatorBuilder", and 
extend com.google.web.bindery.requestfactory.vm.impl.Deobfuscator.Builder.

The ones generated by the ValidationTool/annotation processor initialize 
themselves in the instance 
initializer<http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.6>.
 
but you could do the same in the constructor. Initialization is made in 
three parts:

   - withOperation: registers service methods
   - withRawTypeToken: registers each proxy with their type token
   - withClientToDomainMappings: registers the mappings between domain 
   classes and proxies, i.e. domain-to-client (sic!)

Ex:
withOperation(new OperationKey("<token>"),
   new OperationData.Builder()
      .withClientMethodDescriptor("(<JNI descriptor for method 
arguments>)<JNI descriptor for return type; Request or InstanceRequest>")
      .withDomainMethodDescriptor("<similar, but for the corresponding 
domain method>")
      .withMethodName("…")
      .withRequestContext("…")
      .build());
The OperationKey can be built either with the token directly or the 
RequestContext binary name, method name and client method descriptor (the 
exact same arguments you'll pass to withRequestContext, withMethodName and 
withClientMethodDescriptor). For instance, I compute the token (using the 
3-args ctor and then a call to get(): new OperationKey(contextBinaryName, 
methodName, methodDescriptor).get()) at the time I generate the 
DeobfuscatorBuilder.

withRawTypeToken("<token>", "<proxy binary name>";
The token is computed using OperationKey.hash("<proxy binary name>").

withClientToDomainMapping("<domain class binary name>", 
Arrays.asList("<proxy binary name>", "<another proxy binary name if 
needed>"));

Note that, in the DeobfuscatorBuilder generated by the 
ValidationTool/annotation processor, the BaseProxy, ValueProxy and 
EntityProxy do have their withRawTypeToken, and the latter two are listed 
as client types for java.lang.Object in withClienttoDomainMapping. So 
you'll have at a minimum:
withRawTypeToken("FXHD5YU0TiUl3uBaepdkYaowx9k=", 
"com.google.web.bindery.requestfactory.shared.BaseProxy");
withRawTypeToken("w1Qg$YHpDaNcHrR5HZ$23y518nA=", 
"com.google.web.bindery.requestfactory.shared.EntityProxy");
withRawTypeToken("8KVVbwaaAtl6KgQNlOTsLCp9TIU=", 
"com.google.web.bindery.requestfactory.shared.ValueProxy");
withClientToDomainMappings("java.lang.Object", 
Arrays.asList("com.google.web.bindery.requestfactory.shared.EntityProxy","com.google.web.bindery.requestfactory.shared.ValueProxy"));

An "echo" method could be:
withOperation(new OperationKey("com.example.shared.EchoContext", "echo", 
"(Ljava/lang/String;)Lcom/google/web/bindery/requestfactory/shared/Request;"),
   new OperationData.Builder()
      
.withClientMethodDescriptor("(Ljava/lang/String;)Lcom/google/web/bindery/requestfactory/shared/Request;")
      .withDomainMethodDescriptor("(Ljava/lang/String;)Ljava/lang/String;")
      .withMethodName("echo")
      .withRequestContext("com.example.shared.EchoContext")
      .build());

But as I said, in your case, annotating the property with 
@SkipInterfaceValidation should be enough, and the 
ValidationTool/annotation processor will then generate the 
DeobfuscatorBuilder (because it won't check the domain class for that 
property). And it should work at runtime because properties are resolved by 
name, they're not obfuscated.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/_GgAs2lW8gYJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to