与Jetty HttpClient 9.3.6.v20151106的Proxied HTTP / 2 Apple APN连接

时间:2016-01-19 10:58:09

标签: java jetty http-proxy http2

我正在尝试通过新的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)

我对最近发生的事情一无所知¿有没有人成功做到这一点?

2 个答案:

答案 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

错误:https://github.com/eclipse/jetty.project/issues/250