Repository: cxf Updated Branches: refs/heads/master 807be1795 -> 66a50dd4b
[CXF-6172]:WS-Discovery should work also in IPv6 only environment Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/66a50dd4 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/66a50dd4 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/66a50dd4 Branch: refs/heads/master Commit: 66a50dd4b5a8cd4554a50c8cd8d9bcd32dd2a4a2 Parents: 807be17 Author: Jim Ma <[email protected]> Authored: Thu Nov 5 16:51:31 2015 +0800 Committer: Jim Ma <[email protected]> Committed: Thu Nov 5 16:52:05 2015 +0800 ---------------------------------------------------------------------- .../apache/cxf/ws/discovery/WSDiscoveryClient.java | 14 +++++++++++--- .../discovery/internal/WSDiscoveryServiceImpl.java | 17 ++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/66a50dd4/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/WSDiscoveryClient.java ---------------------------------------------------------------------- diff --git a/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/WSDiscoveryClient.java b/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/WSDiscoveryClient.java index e5734ca..ab6c740 100644 --- a/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/WSDiscoveryClient.java +++ b/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/WSDiscoveryClient.java @@ -77,10 +77,8 @@ import org.apache.cxf.ws.discovery.wsdl.ScopesType; public class WSDiscoveryClient implements Closeable { public static final QName SERVICE_QNAME = new QName(WSDVersion.NS_1_1, "DiscoveryProxy"); - - - String address = "soap.udp://239.255.255.250:3702"; + String ipv6Address = "soap.udp://[FF02::C]:3702"; boolean adHoc = true; AtomicInteger msgId = new AtomicInteger(1); long instanceId = System.currentTimeMillis(); @@ -95,9 +93,11 @@ public class WSDiscoveryClient implements Closeable { public WSDiscoveryClient() { this((Bus)null); + setIpV6Address(); } public WSDiscoveryClient(Bus b) { this.bus = b == null ? BusFactory.getThreadDefaultBus() : b; + setIpV6Address(); } public WSDiscoveryClient(String address) { this((Bus)null); @@ -160,6 +160,14 @@ public class WSDiscoveryClient implements Closeable { uncache(); } } + + private void setIpV6Address() { + String preferIPv4StackValue = System.getProperty("java.net.preferIPv4Stack"); + String preferIPv6AddressesValue = System.getProperty("java.net.preferIPv6Addresses"); + if ("true".equals(preferIPv6AddressesValue) && "false".equals(preferIPv4StackValue)) { + address = "soap.udp://[FF02::C]:3702"; + } + } private void uncache() { if (dispatch instanceof Closeable) { try { http://git-wip-us.apache.org/repos/asf/cxf/blob/66a50dd4/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java ---------------------------------------------------------------------- diff --git a/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java b/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java index 9582a62..f4348a4 100644 --- a/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java +++ b/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java @@ -238,15 +238,26 @@ public class WSDiscoveryServiceImpl implements WSDiscoveryService { startup(false); } public synchronized boolean startup(boolean optional) { + String preferIPv4StackValue = System.getProperty("java.net.preferIPv4Stack"); + String preferIPv6AddressesValue = System.getProperty("java.net.preferIPv6Addresses"); if (!started && client.isAdHoc()) { Bus b = BusFactory.getAndSetThreadDefaultBus(bus); try { udpEndpoint = new EndpointImpl(bus, new WSDiscoveryProvider()); Map<String, Object> props = new HashMap<String, Object>(); props.put("jaxws.provider.interpretNullAsOneway", "true"); - udpEndpoint.setProperties(props); - udpEndpoint.publish("soap.udp://239.255.255.250:3702"); - started = true; + if ("true".equals(preferIPv6AddressesValue) && "false".equals(preferIPv4StackValue)) { + try { + udpEndpoint.publish("soap.udp://[FF02::C]:3702"); + started = true; + } catch (Exception e) { + LOG.log(Level.WARNING, "Could not start WS-Discovery Service with ipv6 address", e); + } + } + if (!started) { + udpEndpoint.publish("soap.udp://239.255.255.250:3702"); + started = true; + } } catch (RuntimeException ex) { if (!optional) { throw ex;
