首页 > 解决方案 > apache骆驼码头websocket java.net.BindException

问题描述

我尝试将 websocket 与Apache Camel Jetty Websocket 组件连接 Websocket 的 url 是:wss://echo.websocket.org

我被这个错误困住了:

org.apache.camel.RuntimeCamelException: MultiException[java.io.IOException: Failed to bind to echo.websocket.org/174.129.224.73:443, java.io.IOException: Failed to bind to echo.websocket.org/174.129.224.73:443]

我还没有真正理解他如何在 ws 和 wss 之间进行选择,我尝试放置一个自签名的 sslContextParameters/

这是我的代码:

@Configuration
public class EipConfiguration extends RouteBuilder {


        @Override
        public void configure() {
            CamelContext context = new DefaultCamelContext();

            String server = "echo.websocket.org";
            int port = 443;

            String uri = "websocket://"+server+":"+port+"/?sslContextParameters=#sslContextParameters";
        from(uri)
                .log(">>> Message received from WebSocket Client : ${body}");
    }

    @Bean(name = "sslContextParameters")
    public SSLContextParameters sslContextParameters() throws Exception {
        TrustManagersParameters trustManagersParameters = new TrustManagersParameters();
        X509ExtendedTrustManager extendedTrustManager = new InsecureX509TrustManager();
        trustManagersParameters.setTrustManager(extendedTrustManager);

        SSLContextParameters sslContextParameters = new SSLContextParameters();
        sslContextParameters.setTrustManagers(trustManagersParameters);

        return sslContextParameters;
    }

}

InsecureX509TrustManager

public class InsecureX509TrustManager extends X509ExtendedTrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
        //Do nothing

    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
        //Do nothing

    }

    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
        //Do nothing

    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
        //Do nothing

    }

    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        //Do nothing

    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        //Do nothing

    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }





    }

标签: javaspringwebsocketapache-camel

解决方案


Jetty WebSocket Component (and Atmosphere WebSocket component) is intended to expose new WebSocket server. If you need to connect as client to remote WebSocket server, you should use AHC Websocket component

The AHC-WS component provides Websocket based endpoints for a client communicating with external servers over Websocket (as a client opening a websocket connection to an external server).


推荐阅读