Signed-off-by: olivier lamy <oliver.lamy@gmail.com>
This commit is contained in:
parent
132aef4420
commit
b4ab8a07c1
|
@ -243,6 +243,18 @@ public class JettyHttpServer extends com.sun.net.httpserver.HttpServer
|
|||
chc.addHandler(jettyContextHandler);
|
||||
_contexts.put(path, context);
|
||||
|
||||
if(!jettyContextHandler.isStarted())
|
||||
{
|
||||
try
|
||||
{
|
||||
jettyContextHandler.start();
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
throw new RuntimeException( e.getMessage(), e );
|
||||
}
|
||||
}
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
|
||||
package org.eclipse.jetty.http.spi;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
import com.sun.net.httpserver.HttpsServer;
|
||||
import com.sun.net.httpserver.spi.HttpServerProvider;
|
||||
import org.eclipse.jetty.server.Handler;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
|
||||
|
@ -29,9 +29,8 @@ import org.eclipse.jetty.server.handler.HandlerCollection;
|
|||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||
import org.eclipse.jetty.util.thread.ThreadPool;
|
||||
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
import com.sun.net.httpserver.HttpsServer;
|
||||
import com.sun.net.httpserver.spi.HttpServerProvider;
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
/**
|
||||
* Jetty implementation of <a href="http://java.sun.com/javase/6/docs/jre/api/net/httpserver/spec/index.html">Java HTTP Server SPI</a>
|
||||
|
|
|
@ -18,68 +18,148 @@
|
|||
|
||||
package org.eclipse.jetty.http.spi;
|
||||
|
||||
import org.eclipse.jetty.client.HttpClient;
|
||||
import org.eclipse.jetty.client.api.ContentResponse;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.ServerConnector;
|
||||
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
|
||||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import javax.jws.WebMethod;
|
||||
import javax.jws.WebService;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.ws.BindingProvider;
|
||||
import javax.xml.ws.Endpoint;
|
||||
import javax.xml.ws.Service;
|
||||
import javax.xml.ws.WebEndpoint;
|
||||
import javax.xml.ws.WebServiceClient;
|
||||
import java.net.URL;
|
||||
|
||||
public class TestEndpointMultiplePublishProblem
|
||||
{
|
||||
|
||||
private static String default_impl = System.getProperty("com.sun.net.httpserver.HttpServerProvider");
|
||||
private static String default_impl = System.getProperty( "com.sun.net.httpserver.HttpServerProvider" );
|
||||
|
||||
@BeforeAll
|
||||
public static void change_Impl()
|
||||
{
|
||||
System.setProperty("com.sun.net.httpserver.HttpServerProvider", JettyHttpServerProvider.class.getName());
|
||||
System.setProperty( "com.sun.net.httpserver.HttpServerProvider", JettyHttpServerProvider.class.getName() );
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
public static void restore_Impl()
|
||||
{
|
||||
if(default_impl != null)
|
||||
if ( default_impl != null )
|
||||
{
|
||||
System.setProperty( "com.sun.net.httpserver.HttpServerProvider", default_impl );
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mainJetty() throws Exception {
|
||||
public void mainJetty()
|
||||
throws Exception
|
||||
{
|
||||
|
||||
Server jettyWebServer = new Server(new DelegatingThreadPool(new QueuedThreadPool()));
|
||||
ServerConnector connector = new ServerConnector(jettyWebServer);
|
||||
connector.setHost("localhost");
|
||||
connector.setPort(0);
|
||||
connector.setReuseAddress(true);
|
||||
jettyWebServer.addConnector(connector);
|
||||
jettyWebServer.setHandler(new ContextHandlerCollection());
|
||||
Server jettyWebServer = new Server( new DelegatingThreadPool( new QueuedThreadPool() ) );
|
||||
ServerConnector connector = new ServerConnector( jettyWebServer );
|
||||
connector.setHost( "localhost" );
|
||||
connector.setPort( 0 );
|
||||
connector.setReuseAddress( true );
|
||||
jettyWebServer.addConnector( connector );
|
||||
jettyWebServer.setHandler( new ContextHandlerCollection() );
|
||||
|
||||
JettyHttpServerProvider.setServer(jettyWebServer);
|
||||
JettyHttpServerProvider.setServer( jettyWebServer );
|
||||
|
||||
jettyWebServer.start();
|
||||
|
||||
Endpoint.publish(String.format("http://%s:%d/hello", "localhost", 0), new Ws());
|
||||
// Comment out the below line for success in later java such as java8_u172, works before u151 or so
|
||||
Endpoint.publish(String.format("http://%s:%d/hello2", "localhost", 0), new Ws());
|
||||
Endpoint.publish( String.format( "http://%s:%d/hello", "localhost", 0 ), new WsHello() );
|
||||
Endpoint.publish( String.format( "http://%s:%d/hello2", "localhost", 0 ), new WsHello() );
|
||||
|
||||
int port = connector.getLocalPort();
|
||||
|
||||
System.out.printf("Started, check: http://localhost:%d/hello?wsdl%n", port);
|
||||
HttpClient httpClient = new HttpClient();
|
||||
httpClient.start();
|
||||
|
||||
{
|
||||
String url = String.format( "http://localhost:%d/hello", port );
|
||||
String urlWsdl = url + "?wsdl";
|
||||
|
||||
ContentResponse contentResponse = httpClient.newRequest( url ).send();
|
||||
Assertions.assertEquals( 200, contentResponse.getStatus() );
|
||||
|
||||
HelloMessengerService helloMessengerService = new HelloMessengerService( new URL( urlWsdl ) );
|
||||
Hello hello = helloMessengerService.getHelloMessengerPort();
|
||||
( (BindingProvider) hello ).getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url );
|
||||
String helloResponse = hello.hello();
|
||||
Assertions.assertEquals( "G'Day mate!", helloResponse );
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
String url2 = String.format( "http://localhost:%d/hello2", port );
|
||||
String url2Wsdl = url2 + "?wsdl";
|
||||
|
||||
ContentResponse contentResponse = httpClient.newRequest( url2Wsdl ).send();
|
||||
Assertions.assertEquals( 200, contentResponse.getStatus() );
|
||||
|
||||
HelloMessengerService helloMessengerService = new HelloMessengerService( new URL( url2Wsdl ) );
|
||||
Hello hello = helloMessengerService.getHelloMessengerPort();
|
||||
( (BindingProvider) hello ).getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url2 );
|
||||
String helloResponse = hello.hello();
|
||||
Assertions.assertEquals( "G'Day mate!", helloResponse );
|
||||
}
|
||||
httpClient.stop();
|
||||
jettyWebServer.stop();
|
||||
}
|
||||
|
||||
@WebService( targetNamespace = "http://org.eclipse.jetty.ws.test", name = "HelloService" )
|
||||
public interface Hello
|
||||
{
|
||||
@WebMethod
|
||||
String hello();
|
||||
}
|
||||
|
||||
|
||||
@WebService
|
||||
public static class Ws {
|
||||
@WebService( targetNamespace = "http://org.eclipse.jetty.ws.test", name = "HelloService" )
|
||||
public static class WsHello
|
||||
implements Hello
|
||||
{
|
||||
@WebMethod
|
||||
public String hello() {
|
||||
return "Hello";
|
||||
public String hello()
|
||||
{
|
||||
return "G'Day mate!";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@WebServiceClient( name = "HelloService", targetNamespace = "http://org.eclipse.jetty.ws.test" )
|
||||
public static class HelloMessengerService
|
||||
extends Service
|
||||
{
|
||||
|
||||
public HelloMessengerService( URL wsdlLocation )
|
||||
{
|
||||
super( wsdlLocation, //
|
||||
new QName( "http://org.eclipse.jetty.ws.test", "WsHelloService" ) );
|
||||
}
|
||||
|
||||
@WebEndpoint( name = "HelloServicePort" )
|
||||
public Hello getHelloMessengerPort()
|
||||
{
|
||||
return super.getPort( new QName( "http://org.eclipse.jetty.ws.test", "HelloServicePort" ), //
|
||||
Hello.class );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void assertWsdl( String wsdl )
|
||||
throws Exception
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue