2

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

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) 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) 在 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 (线程.java:636)原因:java.net.SocketException:协议族在 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.www.http.HttpClient.openServer(HttpClient.java:409) 在 sun.net.www.http.HttpClient.openServer(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。在 sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:290) 在 sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:294) 在 sun.nio.cs.StreamEncoder 的 writeBytes(StreamEncoder.java:220) .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) at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:125) at 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。com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:179) 处的 client.TerminatingClientHandler.writeRequestEntity(TerminatingClientHandler.java:291) com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.爪哇:126)... 8更多

我试着-Djava.net.preferIPv4Stack=false-Djava.net.preferIPv6Stack=true没有帮助。

与 IPv6 相同的代码在 Weblogic 上的同一台机器上工作。

有什么建议么?

4

2 回答 2

0

这样启动JBoss

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

或者

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

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

于 2013-07-22T11:13:11.980 回答
0

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

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

于 2013-07-22T12:16:46.687 回答