apache 骆驼码头 websocket java.net.BindException
apache camel jetty websocket java.net.BindException
我尝试用 Apache Camel Jetty Websocket Component 连接一个 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];
}
}
Jetty WebSocket 组件(和 Atmosphere WebSocket 组件)旨在公开新的 WebSocket 服务器。如果您需要作为客户端连接到远程 WebSocket 服务器,您应该使用 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).
我尝试用 Apache Camel Jetty Websocket Component 连接一个 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];
}
}
Jetty WebSocket 组件(和 Atmosphere WebSocket 组件)旨在公开新的 WebSocket 服务器。如果您需要作为客户端连接到远程 WebSocket 服务器,您应该使用 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).