0

RequestBuilder を使用して、クライアント側 (GWT) で REST サービスを呼び出したいと考えています。複合型 (Connexion) をシリアル化する必要があるため、Piriti を選択しました。シリアル化はうまくいっているようです。次に、複雑なオブジェクトの文字列表現を本文のリクエストに添付して、POST リクエストを送信します。

しかし、私は次のエラーがあります:

org.jboss.resteasy.spi.BadRequestException: 次のタイプのメッセージ本文リーダーが見つかりませんでした: クラス com.ald.projet.property.Connexion のコンテンツ タイプ: application/x-www-form-urlencoded

サーバー側で RESTeasy を使用していますが、正しいコンテンツ タイプを受信して​​いないようです。

firebug で確認しました。リクエストのコンテンツ タイプは application/xml です。application/x-www-form-urlencoded ではありません

Request headers
 Host: 127.0.0.1:8888
 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
 Accept: application/xml
 Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
 Accept-Encoding: gzip, deflate
 Connection: keep-alive
 Referer: http://127.0.0.1:8888/Front_End.html?gwt.codesvr=127.0.0.1:9997
 Content-Type: application/xml; charset=UTF-8
 Content-Length: 109
 Pragma: no-cache
 Cache-Control: no-cache

Response headers
  Content-Type: text/html; charset=iso-8859-1
  Server  Jetty(6.1.x)

投稿内容

<connexion>
  <login>azerty</login>
  <password>azerty</password>
</connexion>

クライアント側

    Connexion connexion = new Connexion("azerty", "azerty");

    String url ="proxy.jsp?url=" + URL.encode("http://localhost:8080/rest/service/connexion");
    RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url);

    builder.setHeader("Content-Type", "application/xml");
    builder.setHeader("Accept", "application/xml"); 

    //serialization with Piriti     
    String xml = Connexion.WRITER.toXml(connexion);
    builder.setRequestData(xml);

    builder.setCallback(new RequestCallback() {

        @Override
        public void onResponseReceived(Request request, Response response) {
            GWT.log(response.getText());
            System.out.println(response.getText().trim());
        }

        @Override
        public void onError(Request request, Throwable exception) {
        }
    });

    try{
        builder.send();
    }catch(Exception e){
        e.printStackTrace();
    }
}

Rest サービス (サーバー側)

@POST
@Path("/connexion")
//@Consumes("application/xml")
@Produces("application/xml")
public Response connexion(Connexion connexion){
    String status = connexionDAO.isValidConnection(connexion);
    
    return Response.ok(status).build();
    
}

Connexion.javaクライアント側

public class Connexion {

interface ConnexionReader extends XmlReader<Connexion> {}
public static final ConnexionReader XML = GWT.create(ConnexionReader.class);


public interface ConnexionWriter extends XmlWriter<Connexion> {}
public static final ConnexionWriter WRITER = GWT.create(ConnexionWriter.class);


private String login;
private String password;

public Connexion(){
    
}


public Connexion(String login, String password) {
    super();
    this.login = login;
    this.password = password;
}
public String getLogin() {
    return login;
}
public void setLogin(String login) {
    this.login = login;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}   

}

Connexion.javaサーバー側

@Embeddable
@XmlRootElement(name = "connexion")
public class Connexion {

private String login;
private String password;

public Connexion(){
    
}

public Connexion(String login, String password) {
    super();
    this.login = login;
    this.password = password;
}

@XmlElement
public String getLogin() {
    return login;
}
public void setLogin(String login) {
    this.login = login;
}

@XmlElement
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}   

}

何が起こっていて、それを機能させるために何ができますか?

事前にThx

4

2 に答える 2

1

実際、私のプロキシは私のリクエストの内容を変更していました。

私はGWTアプリケーションをJetty(バックエンド)にデプロイしましたが、それで解決しました。サーバーが1つしかないため、SOPの問題は発生しません。もうプロキシを使用する必要はありませんが、クライアント側で何かを変更するたびに、それを再デプロイする必要があり、時間の損失になります。

于 2013-02-07T14:48:35.127 に答える
0

@Consumes("application/xml") のコメントを外して、デフォルトの application/x-www-form-urlencoded の代わりに XML として処理します

于 2013-01-29T11:43:04.487 に答える