Jersey client throws javax.ws.rs.ProcessingException: java.net.ConnectException : failed to connect to /127.0.0.1 (port 8080)

徘徊边缘 提交于 2020-01-24 01:21:08

问题


I am working with an Android jersey client that sends a form to a web-service. I am getting

javax.ws.rs.ProcessingException: java.net.ConnectException: failed to connect to /127.0.0.1 (port 8080): connect failed: ECONNREFUSED (Connection refused)

I don't have any proxies configured. I can use the web-service via Postman(browser shows it as well).
The SO posts that I have seen till now all talk about having proxies or the server being inactive, both of which is untrue in my case.
My android client side code for connecting to the web-service:

public class SignUpAction implements Runnable {
    private Client client;
    private WebTarget webTarget;
    private Form form;   
    private RegistrationBeanInterface rbI;         
    @Override
    public void run() {
        client = JerseyClientBuilder.newClient();
        try {
            webTarget = client.target(new URI("http://127.0.0.1:8080/WebApp/User/Register"));
            form = new Form();

            Response response = webTarget.request(MediaType.APPLICATION_FORM_URLENCODED).post(Entity.form(form)); 
            this.statusCode = response.getStatus();
        } catch (URISyntaxException e) {
            e.getReason();
        }
    }    
    public int getStatusCode(){
        return this.statusCode;
    }
}

And this is how I call the connecting class inside my activity:

signUpAction = signUpAction.createSignUpAction();
executorService.execute(signUpAction);
statusCode = signUpAction.getStatusCode();
if(statusCode == 200){
   Intent intent = new Intent(this, SignInActivity.class);
   startActivity(intent);
}

My Gradle dependency for Jersey

implementation 'org.glassfish.hk2.external:javax.inject:2.4.0-b06'    
implementation('org.glassfish.jersey.containers:jersey-container-servlet:2.25.1') {
        exclude module : 'javax.inject'
    }

This is my stacktrace :

The following warnings have been detected: WARNING: HK2 service reification failed for [org.glassfish.jersey.message.internal.DataSourceProvider] with an exception:
          MultiException stack 1 of 4
          java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: javax.activation.DataSource
              at org.glassfish.hk2.utilities.cache.LRUHybridCache.compute(LRUHybridCache.java:315)
              at org.glassfish.hk2.utilities.reflection.internal.ClassReflectionHelperImpl.getAllMethods(ClassReflectionHelperImpl.java:108)
              at org.jvnet.hk2.internal.Utilities.findInitializerMethods(Utilities.java:1341)
              at org.jvnet.hk2.internal.DefaultClassAnalyzer.getInitializerMethods(DefaultClassAnalyzer.java:107)
              at org.glassfish.jersey.internal.inject.JerseyClassAnalyzer.getInitializerMethods(JerseyClassAnalyzer.java:242)
              at org.jvnet.hk2.internal.Utilities.getInitMethods(Utilities.java:218)
              at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:145)
              at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:180)
              at org.jvnet.hk2.internal.SystemDescriptor.internalReify(SystemDescriptor.java:740)
              at org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:694)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:461)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2288)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.access$1200(ServiceLocatorImpl.java:125)
              at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1373)
              at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1368)
              at org.glassfish.hk2.utilities.cache.internal.WeakCARCacheImpl.compute(WeakCARCacheImpl.java:116)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1430)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1355)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1344)
              at org.glassfish.jersey.internal.inject.Providers.getServiceHandles(Providers.java:354)
              at org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:201)
              at org.glassfish.jersey.message.internal.MessageBodyFactory.<init>(MessageBodyFactory.java:221)
              at java.lang.reflect.Constructor.newInstance(Native Method)
              at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1375)
              at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:272)
              at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:366)
              at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487)
              at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83)
              at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:71)
              at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97)
              at java.util.concurrent.FutureTask.run(FutureTask.java:237)
              at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154)
              at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
              at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:122)
              at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:774)
              at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:786)
              at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:111)
              at org.glassfish.jersey.client.RequestProcessingInitializationStage.apply(RequestProcessingInitializationStage.java:97)
              at org.glassfish.jersey.client.RequestProcessingInitializationStage.apply(RequestProcessingInitializationStage.java:67)
              at org.glassfish.jersey.process.internal.Stages$LinkedStage.apply(Stages.java:308)
              at org.glassfish.jersey.process.internal.Stages.process(Stages.java:171)
            at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:25
E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1
                  Process: com.stuff.echo01.dummypracticeapplication_01_09_2018, PID: 3677
                  javax.ws.rs.ProcessingException: java.net.ConnectException: failed to connect to /127.0.0.1 (port 8080): connect failed: ECONNREFUSED (Connection refused)
                      at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:287)
                      at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:252)
                      at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
                      at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681)
                      at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
                      at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
                      at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
                      at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
                      at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681)
                      at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437)
                      at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343)
                      at com.stuff.echo01.dummypracticeapplication_01_09_2018.authpackage.SignUpAction.run(SignUpAction.java:90)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 8080): connect failed: ECONNREFUSED (Connection refused)
                      at libcore.io.IoBridge.connect(IoBridge.java:124)
                      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
                      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452)
                      at java.net.Socket.connect(Socket.java:884)
                      at com.android.okhttp.internal.Platform.connectSocket(Platform.java:117)
                      at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:160)
                      at com.android.okhttp.internal.http.SocketConnector.connectCleartext(SocketConnector.java:67)
                      at com.android.okhttp.Connection.connect(Connection.java:152)
                      at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185)
                      at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
                      at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)
                      at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
                      at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)
                      at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.getOutputStream(TrackedHttpURLConnection.java:288)
                      at com.android.tools.profiler.support.network.httpurl.HttpURLConnection$.getOutputStream(HttpURLConnection$.java:212)
                      at org.glassfish.jersey.client.internal.HttpUrlConnector$4.getOutputStream(HttpUrlConnector.java:390)
                      at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200)
                      at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:194)
                      at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:228)
                      at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:299)
                      at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:170)
                      at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:161)
                      at org.glassfish.jersey.message.internal.ReaderWriter.writeToAsString(ReaderWriter.java:193)
                      at org.glassfish.jersey.message.internal.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:130)
                    at org.glassfish.jersey.messag  

回答1:


Change

http://127.0.0.1:8080/WebApp/User/Register

to

http://10.0.2.2:8080/WebApp/User/Register

because Android emulator maps 10.0.2.2 (as long as your server is mapped to localhost of the pc) to 127.0.0.1 of host machine.

Here is the Google documentation https://developer.android.com/studio/run/emulator-networking.html




回答2:


Since the server isn't running on your phone, you can't connect to it using 127.0.0.1:port as it isn't on the device itself. You have to find the internal IP of the server (192.168.*.*) and connect to that instead.

127.0.0.1 or localhost requires the server/target to be on the current device. Meaning you can connect to 127.0.0.1 on the computer, but not from a different device on the same network.


If your phone and computer are on two different networks, that's an entirely different problem. You have to make sure port forwarding is enabled, and you have to connect to the external IP of the router



来源:https://stackoverflow.com/questions/48637658/jersey-client-throws-javax-ws-rs-processingexception-java-net-connectexception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!