Hi Aleksej, We await this backport for migrating our system into JDK 8. If you want some help to progress it, please let me know :)
Thanks, Yuji 2016-08-04 9:35 GMT+09:00 KUBOTA Yuji <kubota.y...@gmail.com>: > Hi Aleksej, > > Thank you very much! > If you need some help about the patch, please mention me :) > > Thanks, > Yuji > > 2016-08-03 19:56 GMT+09:00 Aleks Efimov <aleksej.efi...@oracle.com>: >> Hi Yuji, >> >> I've created JDK8 backport [1] for this issue and will work on it in the >> upcoming months. >> >> Best Regards, >> >> Aleksej >> >> [1] https://bugs.openjdk.java.net/browse/JDK-8162941 >> >> >> >> On 02/08/16 08:33, KUBOTA Yuji wrote: >>> >>> Hi all, >>> >>> Could you let me know when this fix will be backport to JDK 8? >>> We need this backport to migrate our system from JDK 7 to JDK 8. >>> >>> Thanks, >>> Yuji >>> >>> 2016-02-10 10:17 GMT+09:00 KUBOTA Yuji <kubota.y...@gmail.com>: >>>> >>>> Hi Miroslav, >>>> >>>> Thank you for your sponsor! : >>>> https://bugs.openjdk.java.net/browse/JDK-8146086 >>>> >>>> Can I ask the schedule when does this fix backport to JDK8 ? >>>> >>>> Thanks, >>>> Yuji >>>> >>>> 2015-12-02 22:39 GMT+09:00 Miroslav Kos <miroslav....@oracle.com>: >>>>> >>>>> Hi Yuji, >>>>> thanks for the patch - it fixes the issue and looks ok to me. I'll >>>>> integrate >>>>> it to standalone JAX-WS repo and it will be integrated into openjdk >>>>> during >>>>> next syncup. >>>>> >>>>> Thanks >>>>> Miran >>>>> >>>>> >>>>> >>>>> >>>>> On 01/12/15 11:11, KUBOTA Yuji wrote: >>>>>> >>>>>> Hi Miroslav and all, >>>>>> >>>>>> Could you please review the below issue and patch? >>>>>> >>>>>> I got the advice by Alan at net-dev. So I want to ask you. >>>>>> >>>>>> http://mail.openjdk.java.net/pipermail/net-dev/2015-December/009361.html >>>>>> >>>>>> ---- >>>>>> I'm at the HackerGarten @ JavaOne15, and write a patch for OpenJDK >>>>>> community. This's second times from JavaOne14. :) >>>>>> >>>>>> We find an unexpected exception in JAX-WS, so I write a patch to fix >>>>>> it. >>>>>> We think that this issue may block the migration to JDK9 from JDK7. >>>>>> >>>>>> If we bind 0.0.0.0 ( using as wildcard ) to publish multiple as the >>>>>> following test code, JDK9 (and JDK8) returns "java.net.BindException: >>>>>> Address already in use.” as the below. But JDK7 does NOT return the >>>>>> exception. >>>>>> >>>>>> - Test code for reproduce >>>>>> --- >>>>>> import javax.jws.*; >>>>>> import javax.xml.ws.*; >>>>>> >>>>>> public class WSTest{ >>>>>> >>>>>> @WebService >>>>>> public static class Method1{ >>>>>> @WebMethod >>>>>> public String getMethod1Value(){ >>>>>> return "from Method1"; >>>>>> } >>>>>> } >>>>>> >>>>>> @WebService >>>>>> public static class Method2{ >>>>>> @WebMethod >>>>>> public String getMethod2Value(){ >>>>>> return "from Method2"; >>>>>> } >>>>>> } >>>>>> >>>>>> public static void main(String[] args) throws Exception{ >>>>>> Endpoint endPoint1 = >>>>>> Endpoint.publish("http://0.0.0.0:8081/method1", >>>>>> new >>>>>> Method1()); >>>>>> Endpoint endPoint2 = >>>>>> Endpoint.publish("http://0.0.0.0:8081/method2", >>>>>> new >>>>>> Method2()); >>>>>> >>>>>> System.out.println("Sleep 3 secs..."); >>>>>> >>>>>> Thread.sleep(3000); >>>>>> >>>>>> endPoint2.stop(); >>>>>> endPoint1.stop(); >>>>>> } >>>>>> >>>>>> } >>>>>> --- >>>>>> >>>>>> - StackTrace >>>>>> --- >>>>>> Exception in thread "main" >>>>>> com.sun.xml.internal.ws.server.ServerRtException: Server Runtime >>>>>> Error: java.net.BindException: Address already in use >>>>>> at >>>>>> >>>>>> com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:117) >>>>>> at >>>>>> >>>>>> com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:64) >>>>>> at >>>>>> >>>>>> com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:232) >>>>>> at >>>>>> >>>>>> com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:126) >>>>>> at javax.xml.ws.Endpoint.publish(Endpoint.java:240) >>>>>> at wstest.WSTest.main(WSTest.java:27) >>>>>> Caused by: java.net.BindException: Address already in use >>>>>> at sun.nio.ch.Net.bind0(Native Method) >>>>>> at sun.nio.ch.Net.bind(Net.java:432) >>>>>> at sun.nio.ch.Net.bind(Net.java:424) >>>>>> at >>>>>> >>>>>> sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) >>>>>> at >>>>>> sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) >>>>>> at sun.net.httpserver.ServerImpl.<init>(ServerImpl.java:102) >>>>>> at >>>>>> sun.net.httpserver.HttpServerImpl.<init>(HttpServerImpl.java:50) >>>>>> at >>>>>> >>>>>> sun.net.httpserver.DefaultHttpServerProvider.createHttpServer(DefaultHttpServerProvider.java:35) >>>>>> at >>>>>> com.sun.net.httpserver.HttpServer.create(HttpServer.java:130) >>>>>> at >>>>>> >>>>>> com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(ServerMgr.java:86) >>>>>> ... 5 more >>>>>> ----- >>>>>> >>>>>> To publishes the Endpoint, JAX-WS checks whether the HttpContext has >>>>>> been created by given address, then creates a HttpContext if do not >>>>>> exist. >>>>>> If we sets 0.0.0.0 as given address, JAX-WS checks by >>>>>> ServerSocket#getLocalSocketAddress() (server local address), so >>>>>> returns BindException when 0.0.0.0 has been blinded already. >>>>>> >>>>>> Why so? JAX_WS-941[1] fixes NPE in Endpoint.stop but do not think >>>>>> about above situation. And JAX_WS-941 does not back port to JDK7. >>>>>> >>>>>> So I write a patch which is based jdk9/dev/jaxws >>>>>> (changeset:637:2d84c6f4cbba) to fix the BindException with JAX_WS-941. >>>>>> >>>>>> Please review this patch :) >>>>>> >>>>>> [1]: https://java.net/jira/browse/JAX_WS-941 >>>>>> >>>>>> - Patch >>>>>> --- >>>>>> diff -r 2d84c6f4cbba >>>>>> >>>>>> >>>>>> src/java.xml.ws/share/classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java >>>>>> --- >>>>>> >>>>>> a/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java >>>>>> Thu Oct 22 08:47:47 2015 -0700 >>>>>> +++ >>>>>> >>>>>> b/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java >>>>>> Tue Oct 27 19:48:35 2015 +0900 >>>>>> @@ -38,6 +38,7 @@ >>>>>> 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 +82,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(); >>>>>> --- >>>>>> >>>>>> Thanks, >>>>>> Yuji >>>>> >>>>> >>