首页 文章

JBoss 7.1.1上的Jesey Client抛出java.net.SocketException:IPv6地址不可用的协议族

提问于
浏览
2

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

com.sun.jersey.api.client.ClientHandlerException:java.net.SocketException:com.sun.jersey中的com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:128)无法使用协议族 . 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)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)引起:java.net.SocketException:java.net上java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310)的java.net.PlainSocketImpl.socketConnect(Native Method)中的协议族不可用 . net.AbstractPlainSocketImpl.c java.net.Socket.connect上的java.net.Socket.connect(Socket.java:537)中的java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163)上的onnectToAddress(AbstractPlainSocketImpl.java:176)(Socket.java) :487)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)在sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:806)在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.getOutputS tream(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 )at.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)在com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:125)在com.sun.jersey.core.impl位于com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:57)的.provider.entity.StringProvider.writeTo(StringProvider.java:85) m.sun.jersey.api.client.TerminatingClientHandler.writeRequestEntity(TerminatingClientHandler.java:291)在com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:179)在com.sun.jersey.client . urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:126)... 8个其他

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

与IPv6相同的代码在Weblogic上的同一台机器上运行 .

有什么建议?

2 回答

  • 0

    以这种方式启动JBoss

    JBoss 7:./ standalone.sh -Djava.net.preferIPv4Stack = false

    要么

    JBoss 7:./ standalone.sh -Djava.net.preferIPv6Stack = true

    默认情况下,在Java中启用IPv4,您需要明确告知使用Ipv6

  • 0

    这个问题确实通过设置 -Djava.net.preferIPv4Stack=false 来解决,但是将它作为参数传递给 ./standalone.sh 是不够的,因为这个值在 standalone.confstandalone.sh 中被重写 .

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

相关问题