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