JBoss 7.1.1上的Jesey Client抛出java.net.SocketException:协议族不适用于IPv6地址 [英] Jesey Client on JBoss 7.1.1 throw java.net.SocketException: Protocol family unavailable for IPv6 address

查看:231
本文介绍了JBoss 7.1.1上的Jesey Client抛出java.net.SocketException:协议族不适用于IPv6地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Jersey客户端连接到REST服务.
当我使用IPv4地址时,一切正常.
当我尝试用其IPv6替换服务器地址时,抛出以下异常:

I'm trying to connect using Jersey Client to a REST service.
When I'm using IPv4 address everything works fine.
When I'm trying to replace the server address with its IPv6 the following exception is thrown:

com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException:协议族不可用 在com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:128) 在com.sun.jersey.api.client.Client.handle(Client.java:551) 在com.sun.jersey.api.client.WebResource.handle(WebResource.java:556) 位于com.sun.jersey.api.client.WebResource.access $ 200(WebResource.java:69) 在com.sun.jersey.api.client.WebResource $ Builder.put(WebResource.java:475) 在com.bmc.aps.agent.jersey.JerseyClient.put(JerseyClient.java:169) 在com.bmc.aps.agent.portal.PortalConnection.handshake(PortalConnection.java:304) 在com.bmc.aps.agent.portal.PortalConnection.run(PortalConnection.java:786) 在java.lang.Thread.run(Thread.java:636)导致原因:java.net.SocketException:协议族不可用 在java.net.PlainSocketImpl.socketConnect(本地方法) 在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310) 在java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176) 在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163) 在java.net.Socket.connect(Socket.java:537) 在java.net.Socket.connect(Socket.java:487) 在sun.net.NetworkClient.doConnect(NetworkClient.java:174) 在sun.net.www.http.HttpClient.openServer(HttpClient.java:409) 在sun.net.www.http.HttpClient.openServer(HttpClient.java:530) 在sun.net.www.http.HttpClient.(HttpClient.java:240) 在sun.net.www.http.HttpClient.New(HttpClient.java:321) 在sun.net.www.http.HttpClient.New(HttpClient.java:338) 在sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:806) 在sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:747) 在sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:672) 在sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:850) 在com.sun.jersey.client.urlconnection.URLConnectionClientHandler $ 1 $ 1.getOutputStream(URLConnectionClientHandler.java:200) 在com.sun.jersey.api.client.CommittingOutputStream.commitWrite(CommittingOutputStream.java:114) 在com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:86) 在sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220) 在sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:290) 在sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:294) 在sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:140) 在java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) 在java.io.BufferedWriter.flush(BufferedWriter.java:253) 在com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:178) 在com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:125) 在com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:85) 在com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:57) 在com.sun.jersey.api.client.TerminateClientHandler.writeRequestEntity(TerminatedClientHandler.java:291) 在com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:179) 在com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:126) ...另外8个

com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Protocol family unavailable at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:128) at com.sun.jersey.api.client.Client.handle(Client.java:551) at com.sun.jersey.api.client.WebResource.handle(WebResource.java:556) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:69) at com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:475) at com.bmc.aps.agent.jersey.JerseyClient.put(JerseyClient.java:169) at com.bmc.aps.agent.portal.PortalConnection.handshake(PortalConnection.java:304) at com.bmc.aps.agent.portal.PortalConnection.run(PortalConnection.java:786) at java.lang.Thread.run(Thread.java:636) Caused by: java.net.SocketException: Protocol family unavailable at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163) at java.net.Socket.connect(Socket.java:537) at java.net.Socket.connect(Socket.java:487) at sun.net.NetworkClient.doConnect(NetworkClient.java:174) at sun.net.www.http.HttpClient.openServer(HttpClient.java:409) at sun.net.www.http.HttpClient.openServer(HttpClient.java:530) at sun.net.www.http.HttpClient.(HttpClient.java:240) at sun.net.www.http.HttpClient.New(HttpClient.java:321) at sun.net.www.http.HttpClient.New(HttpClient.java:338) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:806) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:747) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:672) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:850) at com.sun.jersey.client.urlconnection.URLConnectionClientHandler$1$1.getOutputStream(URLConnectionClientHandler.java:200) at com.sun.jersey.api.client.CommittingOutputStream.commitWrite(CommittingOutputStream.java:114) at com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:86) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:290) at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:294) at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:140) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) at java.io.BufferedWriter.flush(BufferedWriter.java:253) at com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:178) at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:125) at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:85) at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:57) at com.sun.jersey.api.client.TerminatingClientHandler.writeRequestEntity(TerminatingClientHandler.java:291) at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:179) at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:126) ... 8 more

我尝试使用-Djava.net.preferIPv4Stack=false-Djava.net.preferIPv6Stack=true运行,但没有帮助.

I tried running with -Djava.net.preferIPv4Stack=false and -Djava.net.preferIPv6Stack=true but it didn't help.

与IPv6相同的代码可在Weblogic的同一台计算机上使用.

The same code with IPv6 works on the same machine on Weblogic.

有什么建议吗?

推荐答案

通过设置-Djava.net.preferIPv4Stack=false确实可以解决此问题,但是将其作为参数传递给./standalone.sh是不够的,因为在standalone.conf中重写了该值,并且standalone.sh.

This problem indeed resolves by setting -Djava.net.preferIPv4Stack=false, but passing it as an argument to ./standalone.sh is not enough as this value is rewritten in standalone.conf and standalone.sh.

因此,应该做的是在两个文件中搜索-Djava.net.preferIPv4Stack=true并将其修改为-Djava.net.preferIPv4Stack=false.

Therefor, what should be done is searching for -Djava.net.preferIPv4Stack=true inside both files and modifying them to -Djava.net.preferIPv4Stack=false.

这篇关于JBoss 7.1.1上的Jesey Client抛出java.net.SocketException:协议族不适用于IPv6地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆