【发布时间】:2016-04-24 19:41:07
【问题描述】:
我正在尝试使用经过身份验证的 HTTP 代理(如 Squid)通过新的 Apple APN HTTP/2 接口发送推送通知。
使用 Jetty HTTPClient 9.3.6.v20151106 我已经设法在不使用代理的情况下发送通知,遵循this page 上的代码。
Apple APN HTTP/2 API 需要 ALPN TLS 扩展。我使用的是 JavaSE 1.8.0_u40,所以我用 alpn-boot-8.1.3.v20150130.jar 修改了 JVM 引导类路径:
-Xbootclasspath/p:/latinia/dev/LIMSP/Collectors/AppleHTTP2/alpn-boot-8.1.3.v20150130.jar
现在我正在尝试通过 Squid 代理服务器建立 TLS 隧道。参考 Jetty 文档,代理配置如下:
HttpProxy httpProxy = new HttpProxy("proxyHost", 3128);
ProxyConfiguration proxyConfig = client.getProxyConfiguration();
proxyConfig.getProxies().add(httpProxy);
当我使用代理集运行我的代码时,ALPN API 抛出一个内部异常:
Caused by: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
at org.eclipse.jetty.alpn.ALPN.put(ALPN.java:149)
at org.eclipse.jetty.alpn.client.ALPNClientConnection.<init>(ALPNClientConnection.java:44)
at org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory.newConnection(ALPNClientConnectionFactory.java:52)
at org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2.newConnection(HttpClientTransportOverHTTP2.java:150)
at org.eclipse.jetty.client.HttpProxy$HttpProxyClientConnectionFactory.newConnection(HttpProxy.java:84)
at org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2.lambda$doStart$0(HttpClientTransportOverHTTP2.java:80)
at org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2$$Lambda$2/1340328248.newConnection(Unknown Source)
at org.eclipse.jetty.http2.client.HTTP2Client$ClientSelectorManager.newConnection(HTTP2Client.java:334)
at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:411)
at org.eclipse.jetty.io.ManagedSelector.access$1600(ManagedSelector.java:56)
at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:587)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.execute(ExecuteProduceConsume.java:101)
at org.eclipse.jetty.io.ManagedSelector.run(ManagedSelector.java:136)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)
我不知道发生了什么 ¿ 有没有人成功做到这一点?
【问题讨论】:
标签: java jetty http-proxy http2