Wątek przeniesiony 2017-10-11 22:00 z Java przez Koziołek. Powód: Niepoprawna kategoria forum

Android problem z wysyłaniem RESt JSON

Odpowiedz Nowy wątek
2017-10-11 18:25
0

Mam problem z wołaniem RESTa (wygląda na błąd z parsowaniem).

Exception (leci na lini z wywołaniem metody post()):

Failed resolution of: Ljavax/xml/bind/annotation/XmlRootElement;

java.lang.ClassNotFoundException: Didn't find class "javax.xml.bind.annotation.XmlRootElement" on path: DexPathList[[zip file "/data/app/com.app-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

KOD:

public void registerUser(User user) {
        new AsyncTask<User,Void,Void>() {
            public Void doInBackground(User... params) {
                ClientResponse response = null;
                try {
                    WebResource webQuery = RestClient.service.path("user/registerUser");
                    webQuery.type(MediaType.APPLICATION_JSON);
                    response = webQuery.post(ClientResponse.class, params[0]);
                    System.out.print("dziala");
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                return null;
            }
        }.execute(user);
    }

KLASA USER:

public class User {
    private String nick;
    private String password;
    private String email;
    private Boolean permament = Boolean.valueOf(false);

    public User() {
    }

getters...
setters...
}

Kombinuje, szukam i nic... ;/

edytowany 2x, ostatnio: darksead, 2017-10-11 18:28

Pozostało 580 znaków

2017-10-11 21:00
Zakręcony Ogrodnik
0

nie masz problemu z Multidex i/lub Proguard? jakie masz biblitoeki zaimportowane w gradle?

Pozostało 580 znaków

2017-10-11 21:48
0
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support:design:25.3.1'
    compile 'com.enjoy:Commons:1.0.0-SNAPSHOT'
    compile 'com.android.support:support-v13:25.3.1'
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'
    compile 'com.google.android.gms:play-services-auth:9.8.0'
    compile 'com.sun.jersey:jersey-client:1.9.1'
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
    testCompile 'junit:junit:4.12'
}

Próbowałem też:

public void registerUser(User user) {
        new AsyncTask<User,Void,Void>() {
            public Void doInBackground(User... params) {
                ClientResponse response = null;
                try {
                    WebResource webQuery = RestClient.service.path("user/registerUser");
                    webQuery.type(MediaType.APPLICATION_JSON).header("Content-Type","application/json");
                    response = webQuery.entity(params[0]).post();
                    System.out.print("dziala");
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                return null;
            }
        }.execute(user);
    }

Przy takim kodzie dostaje zwrotke z serwera :

returned a response status of 415 Unsupported Media Type
edytowany 1x, ostatnio: darksead, 2017-10-11 21:49

Pozostało 580 znaków

2017-10-11 21:59
Zakręcony Ogrodnik

https://mvnrepository.com/art[...]un.jersey/jersey-client/1.9.1

widze ze uzywasz biblioteki z 2011 roku, development tego klienta zakonczyl sie w 2015 roku.
uzyj czegos nowego np. Retrofit + OkHttp. bardzo popularne rozwiazanie

Pozostało 580 znaków

2017-10-11 22:07
0

Można przy pomocy tych bibliotek podpiąć po https z plikiem bks ? Może wrzucę jeszcze kod inicjalizacji clienta.

 public static void init(Context context) {
        SSLContext ctx = null;
        try {
            KeyStore trustStore = KeyStore.getInstance("BKS");
            trustStore.load(context.getResources().openRawResource(R.raw.nowywwww), //plik keystore.bks
                    "159357258456".toCharArray());
            TrustManagerFactory tmf = TrustManagerFactory
                    .getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(trustStore);
            ctx = SSLContext.getInstance("SSL");
            ctx.init(null, tmf.getTrustManagers(), null);
        } catch (Exception e) {
            e.printStackTrace();
        }

        ClientConfig config = new DefaultClientConfig();
        config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
                new HTTPSProperties(null, ctx));

        service = Client.create(config).resource(
                "https://" + "192.168.1.3" + ":"
                        + SharedDataKeeper.SERVERPORT +"/");
        service.setProperty("Content-Type", "application/json");
        service.setProperty("Accept", "application/json");

        javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
                new javax.net.ssl.HostnameVerifier() {
                    public boolean verify(String hostname,
                                          javax.net.ssl.SSLSession sslSession) {
                        return hostname.equals(SharedDataKeeper.SERVERIPADDRESS);
                    }
                });
    }

Pozostało 580 znaków

2017-10-11 22:08
Zakręcony Ogrodnik
0

ok dobra jednak jest nowsza wersja tego Jersay:
https://mvnrepository.com/art[...]n.jersey/jersey-client/1.19.4

podbij u siebie w projekcie, zaktualizuj kod i zobacz czy dziala, zawsze staraj sie pracowac na ostatnich wersjach bibliotek (czasem specjalnie uzywa sie starszych...)

ale polecam zapoznac sie z alternatywa ktora podalem czyli Retrofit OkHttp

Pozostało 580 znaków

2017-10-11 22:18
Zakręcony Ogrodnik
0

jeszcze taki news dla Ciebie, widze ze byly mocne problemy z ta biblioteka:

https://blogs.oracle.com/japod/jersey-2x-client-on-android
https://blogs.oracle.com/japo[...]y-2x-client-on-android-take-2

ostatnia stabilna wersja ktora "powinno" sie dac uzyc to 2.26 https://jersey.github.io/ ale nie mialem z tym stycznosci.
jest jakis powod dlaczego ta biblioteka i to w wersji z 2011 roku? jeszcze raz namawiam do Retrofit'a ktory zostal stworzony z mysla o Androidzie

Pozostało 580 znaków

2017-10-12 07:08
Biały Lew
0

Retrofit + RxJava, to jest sluszny wybór

Pozostało 580 znaków

2017-10-12 11:40
Pendzoncy jelen
0

jw. moge dodac jeszcze ze Retrofit2 oraz RxJava2
zapoznaj sie tez z Daggerem ;)

Pozostało 580 znaków

2017-10-12 20:36
0

Zrobiłem sobie na próbe klienta przy pomocy biblioteki Retrofit i OkHttp. Ale mam ciągle błąd:

Hostname 192.168.1.2 not verified:
    certificate: sha256/********************************=
    DN: CN=BLA,OU=BLA,O=BLA,L=BLA,ST=BLA,C=PL,1.2.840.113549.1.9.1=#********************************
    subjectAltNames: []

Kod:

public void retfit() {
        new AsyncTask<User, Void, Void>() {
            public Void doInBackground(User... params) {
                OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
                try {
                    SSLContext ctx = null;
                    try {
                        KeyStore trustStore = KeyStore.getInstance("BKS");
                        trustStore.load(context.getResources().openRawResource(R.raw.nowywwww), //plik keystore.bks
                                "159357258456".toCharArray());
                        TrustManagerFactory tmf = TrustManagerFactory
                                .getInstance(TrustManagerFactory.getDefaultAlgorithm());
                        tmf.init(trustStore);
                        ctx = SSLContext.getInstance("SSL");
                        ctx.init(null, tmf.getTrustManagers(), null);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    ClientConfig config = new DefaultClientConfig();
                    config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
                            new HTTPSProperties(null, ctx));

                    clientBuilder.sslSocketFactory(ctx.getSocketFactory());

                    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
                            new javax.net.ssl.HostnameVerifier() {
                                public boolean verify(String hostname,
                                                      javax.net.ssl.SSLSession sslSession) {
                                    return hostname.equals("192.168.1.2");
                                }
                            });
                } catch (Exception e) {
                    e.printStackTrace();
                }

                Retrofit restAdapter = new Retrofit.Builder()
                        .baseUrl("https://" + "192.168.1.2" + ":" + SharedDataKeeper.SERVERPORT + "/")
                        .client(clientBuilder.build())
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();

                UserEdpointInterface userEdpointInterface = restAdapter.create(UserEdpointInterface.class);
                User user = new User();
                user.setEmail("[email protected]");
                user.setNick("dsds");
                user.setPassword("dupa");
                try {
                    Call a = userEdpointInterface.createUser(user);
                    a.enqueue(new Callback() {
                        @Override
                        public void onResponse(Call call, retrofit2.Response response) {
                            System.out.print("dupa");
                        }

                        @Override
                        public void onFailure(Call call, Throwable t) {
                            System.out.print("dupa2");
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

        }.execute();
    }

Interfejst:

public interface UserEdpointInterface {
    @POST("user/registerUser")
    Call<User> createUser(@Body User user);
}

Kombinuje od kilku godzin i nic...

Pozostało 580 znaków

2017-10-13 14:39
Pendzoncy jelen
0

Ogolnie za malo dajesz info, serwer ma certyfikat?

zobacz:

this.client.setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        //TODO: Make this more restrictive
        return true;
    }
});

https://github.com/square/okhttp/issues/1467

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0