Hi Aleksej and Pango, Thank you for backport and pushing.
Regards, Yuji 2016-12-16 14:32 GMT+09:00 Pango <pango...@gmail.com>: > Hi Aleksej, > > Thank you. Really appreciate your prompt response. > Hope this fix could be included in the next release (8u122?). > > Best Regards, > Pango Chan > > 2016-12-15 20:04 GMT+09:00 Aleks Efimov <aleksej.efi...@oracle.com>: >> Hi Pango, >> The backport is done and I will send backport and review request for JDK8 >> later today (I'm pending testing results). >> >> Best Regards, >> Aleksej >> >> >> On 15/12/16 05:41, Pango wrote: >>> >>> Hi all, >>> >>> May I ask has there been any progress on this issue? >>> >>> Actually we are also struggling with this problem. The software that >>> we are working on do publish with 0.0.0.0 and we got this >>> BindException while migrating to JDK 8. We tried several workarounds >>> but it will be very inconvenient for the end users to follow. >>> >>> Now we are planning to release our product around next January, and >>> really hope that there will be some good news announced by then. >>> >>> It would be very appreciated if anyone can give some information >>> regarding the backport of this fix to JDK 8 update in advance. >>> >>> Thanks for all your hard work and contributions. >>> >>> Best regards, >>> Pango Chan >>> >>> >>> 2016-08-04 09: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 >>>>>>>> >>>>>>>> >>> >>> >> > > > > -- > Best regards, > Pango Chan