2012-05-07 4 views
0

Win7でうまく動作するJersey-Grizzy-Serverを作成します。しかし、Linux上で開始した後、私は何も、サーバーを呼び出していない場合であっても、奇妙な、オールウェイズrepeting例外Jersey Grizzly restful serverがLinux上で奇妙なURISyntaxExceptionをスローする

java.lang.IllegalArgumentException: java.net.URISyntaxException: Expected hostname at index 8: https://:443/ 

を取得します。残りのサービスは常に働いています。誰かがアイデアを持ち、なぜこの例外が起きたのですか、またはgrizzly2 Httpserverのデバッグから始める方法はありましたか?

ザ・サーバーを起動し、このように実装されている(簡体字):

boolean https = true; 
int port = 9960; 
URI baseURI = UriBuilder.fromUri("http" + (https ? "s" : "") + "://0.0.0.0/").port(port).build(); 

//Jersey Service Config 
final ResourceConfig rc = new UriExtensionsConfig(GcardApplication.getConfigPackages()); 

// create Grizzly Container 
final HttpHandler handler = ContainerFactory.createContainer(HttpHandler.class, rc); 

//do the ssl Config 
SLEngineConfigurator ssl = configSSL(https); 

HttpServer server = GrizzlyServerFactory.createHttpServer(baseURI, handler, https, ssl); 

ログ例外で:

INFO: Initiating Jersey application, version 'Jersey: 1.11 12/09/2011 10:27 AM' 
May 7, 2012 8:20:45 PM org.glassfish.grizzly.http.server.NetworkListener start 
INFO: Started listener bound to [0.0.0.0:9960] 
May 7, 2012 8:20:45 PM org.glassfish.grizzly.http.server.HttpServer start 
INFO: [HttpServer] Started. 
Crm WS Server started at https://localhost:9960/ 

Hit Ctrl C to stop the server ... 
May 7, 2012 8:20:46 PM org.glassfish.grizzly.http.server.HttpHandler doHandle 
SEVERE: service exception 
java.lang.IllegalArgumentException: java.net.URISyntaxException: Expected hostname at index 8: https://:443/ 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer.getBaseUri(GrizzlyContainer.java:226) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer._service(GrizzlyContainer.java:195) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer.service(GrizzlyContainer.java:185) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:163) 
    at org.glassfish.grizzly.http.server.HttpHandlerChain.service(HttpHandlerChain.java:195) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:163) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:158) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:286) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:223) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:155) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:134) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:827) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:103) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:111) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:131) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:508) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:488) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.net.URISyntaxException: Expected hostname at index 8: https://:443/ 
    at java.net.URI$Parser.fail(URI.java:2810) 
    at java.net.URI$Parser.failExpecting(URI.java:2816) 
    at java.net.URI$Parser.parseHostname(URI.java:3352) 
    at java.net.URI$Parser.parseServer(URI.java:3198) 
    at java.net.URI$Parser.parseAuthority(URI.java:3117) 
    at java.net.URI$Parser.parseHierarchical(URI.java:3059) 
    at java.net.URI$Parser.parse(URI.java:3015) 
    at java.net.URI.<init>(URI.java:662) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer.getBaseUri(GrizzlyContainer.java:223) 
    ... 20 more 
May 7, 2012 8:20:49 PM org.glassfish.grizzly.http.server.HttpHandler doHandle 
SEVERE: service exception 
java.lang.IllegalArgumentException: java.net.URISyntaxException: Expected hostname at index 8: https://:443/ 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer.getBaseUri(GrizzlyContainer.java:226) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer._service(GrizzlyContainer.java:195) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer.service(GrizzlyContainer.java:185) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:163) 
    at org.glassfish.grizzly.http.server.HttpHandlerChain.service(HttpHandlerChain.java:195) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:163) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:158) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:286) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:223) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:155) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:134) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:827) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:103) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:111) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:131) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:508) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:488) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.net.URISyntaxException: Expected hostname at index 8: https://:443/ 
    at java.net.URI$Parser.fail(URI.java:2810) 
    at java.net.URI$Parser.failExpecting(URI.java:2816) 
    at java.net.URI$Parser.parseHostname(URI.java:3352) 
    at java.net.URI$Parser.parseServer(URI.java:3198) 
    at java.net.URI$Parser.parseAuthority(URI.java:3117) 
    at java.net.URI$Parser.parseHierarchical(URI.java:3059) 
    at java.net.URI$Parser.parse(URI.java:3015) 
    at java.net.URI.<init>(URI.java:662) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer.getBaseUri(GrizzlyContainer.java:223) 
    ... 
+0

にGET要求を修正しなければならなかった文字列

GET/HTTP/1.1\r\nHost: \r\nConnection: close\r\n\r\n 

を送っていたReversProxysヘルスチェックのコンフィグ(でした/ etc/hosts、おそらく)あなたのlinuxディストリビューションで? –

+0

すでに/ etc/hostsに を設定しています 127.0.0.1 localhost – mbue

+0

Jersey Loggerを動作させることができます。そしてそこに私のサーバーがどこから呼び出されているかを見ることができます。逆プロキシがポート9960で呼び出され、443では呼び出されていないようです。 – mbue

答えて

0

ソースは問題外ループバックアドレス設定した次は、私たちが

GET https://servername:9960/ HTTP/1.1\r\nHost: originalservername\r\nConnection: close\r\n\r\n 
0

https://:443/は有効なURLではありません - 何のホスト名がありません。

あなたのコードから、私はあなたがUriBuilder.fromUri("https://0.0.0.0/")

が本当に"0.0.0.0"ここで有効な値で呼び出すことがわかり?

コマンドhostnamedomainnameの出力を確認してください。彼らは有用な値を返さなければなりません(domainnameはそれほど重大ではありませんが、有用な値があれば良いでしょう)。

また、自分のIPアドレスを確認する方法この回答を参照してください。How to get the ip of the computer on linux through Java?

[EDIT]おそらく、コード内の間違った場所を見ています。 URISyntaxExceptionのコンストラクタにブレークポイントを設定し、壊れたURIがどこから来るかを調べます。

+0

Jersey FactoryはURI u: から内部的にそれを割り当てます。String host =(u.getHost()== null)? NetworkListener.DEFAULT_NETWORK_HOST:u.getHost(); 定数ストリングDEFAULT_NETWORK_HOST = "0.0.0.0" しかし、localhost用のネットワークリスナー1とサーバーIP用のネットワークリスナー1の2つの同じissuです。 – mbue

+0

Ah。投稿したコードはJersyの設定用です。しかし、その部分はログ(ポート= 9660)で見ることができるように機能します。 SSLアクセス用のURLを作成するコード(ポートが443のコード)を確認する必要があります。 –

+0

サーバーが実行されます。ポート443にネットワークリスナーはありません。この要求はどこから来ていますか? netstat -apl | grep 443 unix 2 [ACC] STREAM LISTENING 27443 - private/scache – mbue

関連する問題