0

ClassCastException が発生しています。ここで何が間違っているのだろうか。を行う(RegistrationRequest)(element.getValue())とうまくいくはずです。私はそれ(RegistrationRequest)element.getValue()がないかもしれないことを知っています。

SEVERE: Servlet.service() for servlet [Jersey REST Service] in context with path [/mCruiseOnCarPool4All] threw exception
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl cannot be cast to com.mcruiseon.common.message.request.RegistrationRequest

Server Post メソッド。メソッド シグネチャの JAXBElement に注意してください。私はそれをタイプキャストしていclientSession.waitAndGetResponse((RegistrationRequest)(element.getValue())) ;ます。これは、例外が発生している行番号です。

@POST
@Path ("Request")
@Consumes({ MediaType.APPLICATION_JSON })
public Response post(JAXBElement<Object> element) {
    AMessageStrategy response ;
    try {
        clientSession = new ClientSession(God.mCruiseOnServer) ;
    } catch (InvalidServerDNSorIPException e) {
        e.printStackTrace();
        return Response.serverError().build() ;
    }
    sessionKey = sessionManager.setClientSession(clientSession) ;
    clientSession.setSessionKey(sessionKey) ;

    clientSession.getSendQueue().sendRequest((RegistrationRequest)(element.getValue()));                
    try {
        response = clientSession.waitAndGetResponse((RegistrationRequest)(element.getValue())) ;
    } catch (WaitedLongEnoughException e) {
        return Response.serverError().build() ;
    } catch (UnableToResolveResponseException e) {
        return Response.serverError().build() ;
    }   
    return Response.ok(response).build();
}

クライアント側はjunitテストケースで、コードの関連部分は

ClientIdentityConcrete clientIdentity = new ClientIdentityConcrete("username", "password", "secretkey") ;
RegistrationRequest register = new RegistrationRequest(clientIdentity);
String jsonStr = mapper.writeValueAsString(clientIdentity);
HttpPost request = new HttpPost("http://localhost:8081/mCruiseOnCarPool4All/carpool4all/Registration/Request");
StringEntity se = new StringEntity(jsonStr);
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
request.setEntity(se);
HttpResponse response = client.execute(request);
4

1 に答える 1

0

問題はクライアント側のjunitテストケースにありました。レジスターを使用してJsonオブジェクトを作成していませんでした。代わりに、clientIdentityを使用してオブジェクトを作成しています。に注意してwriteValueAsStringください。また、レガシーhttpではなくJSONクライアントAPIを実際に使用するようにクライアント全体を変更しました。まだ動作していませんが、別の例外が発生しています。しかし、それは別の質問です。

ClientConfig config = new DefaultClientConfig();
        Client client = Client.create(config);
        WebResource service = client.resource(UriBuilder.fromUri(
                "http://localhost:8081/mCruiseOnCarPool4All").build());

        ClientIdentityConcrete clientIdentity = new ClientIdentityConcrete("username", "password", "secretkey");
        RegistrationRequest register = new RegistrationRequest(clientIdentity);
        AMessageStrategy response = service.path("carpool4all").path("Registration").path("Request")
                .type(MediaType.APPLICATION_JSON).post(RegistrationRequest.class, register);
        assertNotNull(response) ;
        assertNotNull(((RegistrationResponse)response).getIdentityHash()) ;
于 2012-10-22T12:07:07.843 に答える