2017-06-06 5 views
1

私は、ネットワークを介して送信するために外部化したいカスタムオブジェクトのCN1 Webサービスを作成しました。 Webサービスの作成方法とCN1 Externalizableインターフェイスの操作方法に関する記事をいくつか読みました。コードネーム1 - 外部化可能オブジェクトがWebサービスでサポートされていません

SCHWERWIEGEND: Servlet.service() for servlet [CN1WebServiceServlet] 
in context with path [/<myPath>] threw exception 
java.io.IOException: Object type not supported: Post 

これは、カスタム外部化オブジェクトを返すWebサービスメソッドに適しています、私は持っているが唯一の指標は、引数として外部化オブジェクトを受け取り方法は、私は次のエラーを取得するということです

オブジェクトは、オブジェクトIDを変更するか、またはレジスタ呼び出しをコメントアウトすると、IO例外の代わりにヌルポインタが発生するため、Utilクラスに正しく登録されます。

Postクラスが(すでに失敗最小限に簡素化)次のようになります。この後のオブジェクトは、私はpostオブジェクトを返すWebサービスメソッドを呼び出したときにうまく動作しますが、ないことを

public class Post implements Externalizable { 
public int postid; 
public int userid; 

// default constructor needed for web service marshalling 
public Post() { 

} 

@Override 
public int getVersion() { 
    return 1; 
} 

@Override 
public void externalize(DataOutputStream out) throws IOException { 
    Util.writeUTF("" + postid, out); 
    Util.writeUTF("" + userid, out); 
} 

@Override 
public void internalize(int version, DataInputStream in) throws IOException { 
    this.postid = Integer.parseInt(Util.readUTF(in)); 
    this.userid = Integer.parseInt(Util.readUTF(in)); 
} 

@Override 
public String getObjectId() { 
    return "Post"; 
} 

注意私は、Webサービスに投稿・オブジェクトを送信:

// works 
public static com.codename1.io.Externalizable getPostDetails(int postid) { 
    return getPostDetails(postid); 
} 

// fails 
public static void sendPost(com.codename1.io.Externalizable post) { 
    sendPost(post); 
} 

私はここで逃したものの喪失でいます。

おかげで、うまくいけば、これを解決する必要がありますよろしくお使いのサーブレットコードの呼び出しUtil.register("Post", Post.class);

答えて

1

0

ありがとうShai!私の間違いは、外部化可能なオブジェクトを一方の側にのみ登録すると仮定することでした。もちろん、それは私のサーバー上のこのケースでは、内部化される予定のどこにでも登録する必要があります。

ソリューション: "CN1WebServiceServlet"(コードの残りの部分が完了するProxyServerクラスではありません)内で、Util.register( "Post"、Post.class)を呼び出します。

 if(methodName.equals("sendPost")) { 
      Util.register("Post", Post.class); // this is a my insertedline, rest is generated 
      Object[] args = ProxyServerHelper.readMethodArguments(di, def_sendPost); 
      WebServiceProxyServer.sendPost((com.codename1.io.Externalizable)args[0]); 
      ProxyServerHelper.writeResponse(response, def_sendPost); 
      return; 
     } 
関連する問題