--- a/jaxws/src/java.xml.bind/share/classes/javax/xml/bind/JAXBContextFactory.java Thu Jan 21 09:46:01 2016 -0800
+++ b/jaxws/src/java.xml.bind/share/classes/javax/xml/bind/JAXBContextFactory.java Thu Jan 21 10:15:38 2016 -0800
@@ -32,7 +32,7 @@
*
* JAXBContextFactory can be located using {@link java.util.ServiceLoader#load(Class)}
*
- * @since 1.9, JAXB 2.3
+ * @since 9, JAXB 2.3
*/
public interface JAXBContextFactory {
@@ -68,7 +68,7 @@
* @throws IllegalArgumentException
* if the parameter contains {@code null} (i.e., {@code newInstance(null,someMap);})
*
- * @since 1.9, JAXB 2.3
+ * @since 9, JAXB 2.3
*/
JAXBContext createContext(Class<?>[] classesToBeBound,
Map<String, ?> properties ) throws JAXBException;
@@ -100,7 +100,7 @@
* <li>failure to locate a value for the context factory provider property</li>
* <li>mixing schema derived packages from different providers on the same contextPath</li>
* </ol>
- * @since 1.9, JAXB 2.3
+ * @since 9, JAXB 2.3
*/
JAXBContext createContext(String contextPath,
ClassLoader classLoader,
--- a/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java Thu Jan 21 09:46:01 2016 -0800
+++ b/jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java Thu Jan 21 10:15:38 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,8 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Logger;
+import java.util.Optional;
+
/**
* Manages all the WebService HTTP servers created by JAXWS runtime.
@@ -81,24 +83,38 @@
synchronized(servers) {
state = servers.get(inetAddress);
if (state == null) {
- logger.fine("Creating new HTTP Server at "+inetAddress);
- // Creates server with default socket backlog
- server = HttpServer.create(inetAddress, 0);
- server.setExecutor(Executors.newCachedThreadPool());
- String path = url.toURI().getPath();
- logger.fine("Creating HTTP Context at = "+path);
- HttpContext context = server.createContext(path);
- server.start();
+ final int finalPortNum = port;
+ Optional<ServerState> stateOpt =
+ servers.values()
+ .stream()
+ .filter(s -> s.getServer()
+ .getAddress()
+ .getPort() == finalPortNum)
+ .findAny();
- // we have to get actual inetAddress from server, which can differ from the original in some cases.
- // e.g. A port number of zero will let the system pick up an ephemeral port in a bind operation,
- // or IP: 0.0.0.0 - which is used to monitor network traffic from any valid IP address
- inetAddress = server.getAddress();
+ if (inetAddress.getAddress().isAnyLocalAddress() &&
+ stateOpt.isPresent()) {
+ state = stateOpt.get();
+ } else {
+ logger.fine("Creating new HTTP Server at "+inetAddress);
+ // Creates server with default socket backlog
+ server = HttpServer.create(inetAddress, 0);
+ server.setExecutor(Executors.newCachedThreadPool());
+ String path = url.toURI().getPath();
+ logger.fine("Creating HTTP Context at = "+path);
+ HttpContext context = server.createContext(path);
+ server.start();
- logger.fine("HTTP server started = "+inetAddress);
- state = new ServerState(server, path);
- servers.put(inetAddress, state);
- return context;
+ // we have to get actual inetAddress from server, which can differ from the original in some cases.
+ // e.g. A port number of zero will let the system pick up an ephemeral port in a bind operation,
+ // or IP: 0.0.0.0 - which is used to monitor network traffic from any valid IP address
+ inetAddress = server.getAddress();
+
+ logger.fine("HTTP server started = "+inetAddress);
+ state = new ServerState(server, path);
+ servers.put(inetAddress, state);
+ return context;
+ }
}
}
server = state.getServer();