我正在尝试通过新的Apple APN HTTP / 2接口发送推送通知,使用经过身份验证的HTTP代理(如Squid)。
使用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 bootclasspath:
-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)
我对最近发生的事情一无所知¿有没有人成功做到这一点?
答案 0 :(得分:0)
Jetty 9.3.8修复了许多与转发代理处理相关的错误,就像你的例子一样。试一试。
答案 1 :(得分:0)
我想你不能用这个版本。
版本9.3.8解决了您的NPE异常。
但是,HttpProxy使用只使用一个transportClient的HttpClient。当您尝试与代理通信时,它使用HTTP / 2(PRI * HTTP / 2.0)而不是HTTP / 1.1。
我正在使用transportClient,它可以使用http 1.1或http 2.这个选择取决于ALPN协商。我正在尝试集成代理。
https://github.com/stephanemartin/jettyTests/tree/master/src/main/java/testjettys2