0

カスタムクラスジェネレーターがあります。このジェネレーターでは、2 つのクラスを作成します

public class WsRpcServerGenerator extends Generator{
   @Override
   public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException {
      JClassType classType;
      try {
         classType = context.getTypeOracle().getType(typeName);
         SourceWriter src;
         try {
            // generating first file xxxAsync for client
            src = generateMethod( classType, context, logger);
            // generating second class for server side
            SourceWriter src2 = generateMethodArgs( classType, context, logger);
         if (src2!=null)
            src2.commit(logger);
         } catch (Exception e) {}
         // returning first class for client
         if (src == null)return typeName + "__AsyncWsRpcGenerated";
            src.commit(logger);         
         return typeName + "__AsyncWsRpcGenerated";
      } catch (NotFoundException e) {}
   }
}

私が使う

TestObject obj = GWT.create(TestObject.class);

これは仕事です。gwt は 2 つのファイルを生成しました。最初にクライアントにロードされます。

しかし、サーバー側で2番目のファイルをロードする方法がわかりません。可視性で生成されたクラスのためにEclipseでプロジェクトを更新すると、クラスがtest=Class.forName("com.xxx.TestObject__ArgsGenerated");. しかし、プロジェクト、そのライブラリを更新しません。

ありがとう

4

2 に答える 2

0

私は解決策を見つけ、元の gwt ClassSourceFileComposerFactory に触発された独自のコンパイラを作成しました

ジェネレーターソース

利用方法

DynamicJavaFileObject composer = new DynamicJavaFileObject("com.xxx","ClassName");

composer.setSuperclass("superclass");
composer.addImport(GWT.class.getCanonicalName());

SourceWriter writer = composer.getSourceWriter();

writer.println("public String test(){return \"test\"}");

writer.commit(logger);

サーバー側でクラスを見つけることができるようになりました

Class.forName("com.xxx.ClassName");
于 2013-07-15T17:42:24.710 に答える