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);
|
chc.addHandler(jettyContextHandler);
|
||||||
_contexts.put(path, context);
|
_contexts.put(path, context);
|
||||||
|
|
||||||
|
if(!jettyContextHandler.isStarted())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
jettyContextHandler.start();
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new RuntimeException( e.getMessage(), e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.http.spi;
|
package org.eclipse.jetty.http.spi;
|
||||||
|
|
||||||
import java.io.IOException;
|
import com.sun.net.httpserver.HttpServer;
|
||||||
import java.net.InetSocketAddress;
|
import com.sun.net.httpserver.HttpsServer;
|
||||||
|
import com.sun.net.httpserver.spi.HttpServerProvider;
|
||||||
import org.eclipse.jetty.server.Handler;
|
import org.eclipse.jetty.server.Handler;
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
|
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.QueuedThreadPool;
|
||||||
import org.eclipse.jetty.util.thread.ThreadPool;
|
import org.eclipse.jetty.util.thread.ThreadPool;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpServer;
|
import java.io.IOException;
|
||||||
import com.sun.net.httpserver.HttpsServer;
|
import java.net.InetSocketAddress;
|
||||||
import com.sun.net.httpserver.spi.HttpServerProvider;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jetty implementation of <a href="http://java.sun.com/javase/6/docs/jre/api/net/httpserver/spec/index.html">Java HTTP Server SPI</a>
|
* 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;
|
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.Server;
|
||||||
import org.eclipse.jetty.server.ServerConnector;
|
import org.eclipse.jetty.server.ServerConnector;
|
||||||
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
|
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
|
||||||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||||
import org.junit.jupiter.api.AfterAll;
|
import org.junit.jupiter.api.AfterAll;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import javax.jws.WebMethod;
|
import javax.jws.WebMethod;
|
||||||
import javax.jws.WebService;
|
import javax.jws.WebService;
|
||||||
|
import javax.xml.namespace.QName;
|
||||||
|
import javax.xml.ws.BindingProvider;
|
||||||
import javax.xml.ws.Endpoint;
|
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
|
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
|
@BeforeAll
|
||||||
public static void change_Impl()
|
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
|
@AfterAll
|
||||||
public static void restore_Impl()
|
public static void restore_Impl()
|
||||||
{
|
{
|
||||||
if(default_impl != null)
|
if ( default_impl != null )
|
||||||
{
|
{
|
||||||
System.setProperty( "com.sun.net.httpserver.HttpServerProvider", default_impl );
|
System.setProperty( "com.sun.net.httpserver.HttpServerProvider", default_impl );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void mainJetty() throws Exception {
|
public void mainJetty()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
|
||||||
Server jettyWebServer = new Server(new DelegatingThreadPool(new QueuedThreadPool()));
|
Server jettyWebServer = new Server( new DelegatingThreadPool( new QueuedThreadPool() ) );
|
||||||
ServerConnector connector = new ServerConnector(jettyWebServer);
|
ServerConnector connector = new ServerConnector( jettyWebServer );
|
||||||
connector.setHost("localhost");
|
connector.setHost( "localhost" );
|
||||||
connector.setPort(0);
|
connector.setPort( 0 );
|
||||||
connector.setReuseAddress(true);
|
connector.setReuseAddress( true );
|
||||||
jettyWebServer.addConnector(connector);
|
jettyWebServer.addConnector( connector );
|
||||||
jettyWebServer.setHandler(new ContextHandlerCollection());
|
jettyWebServer.setHandler( new ContextHandlerCollection() );
|
||||||
|
|
||||||
JettyHttpServerProvider.setServer(jettyWebServer);
|
JettyHttpServerProvider.setServer( jettyWebServer );
|
||||||
|
|
||||||
jettyWebServer.start();
|
jettyWebServer.start();
|
||||||
|
|
||||||
Endpoint.publish(String.format("http://%s:%d/hello", "localhost", 0), new Ws());
|
Endpoint.publish( String.format( "http://%s:%d/hello", "localhost", 0 ), new WsHello() );
|
||||||
// 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 WsHello() );
|
||||||
Endpoint.publish(String.format("http://%s:%d/hello2", "localhost", 0), new Ws());
|
|
||||||
|
|
||||||
int port = connector.getLocalPort();
|
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
|
@WebService( targetNamespace = "http://org.eclipse.jetty.ws.test", name = "HelloService" )
|
||||||
public static class Ws {
|
public static class WsHello
|
||||||
|
implements Hello
|
||||||
|
{
|
||||||
@WebMethod
|
@WebMethod
|
||||||
public String hello() {
|
public String hello()
|
||||||
return "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