package bsh;
import java.util.*;
import java.io.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.*;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import javax.xml.ws.Endpoint;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
// freemarker template
public class Deploy3 {
private static int DEPLOY_PORT = Integer.valueOf(System.getProperty("deployPort")) + 0;
private static int STOP_PORT = Integer.valueOf(System.getProperty("stopPort")) + 0;
public static void main(String[] args) throws Throwable {
Endpoint e = deploy();
System.out.println("Endpoint [" + e + "] successfully deployed.");
System.out.println("Deploying endpoint STOPPER to [http://localhost:" + STOP_PORT + "/stop]");
new EndpointStopper(STOP_PORT, e);
}
static Endpoint deploy() throws Exception {
List<Source> metadata = new ArrayList<Source>();
metadata.add(
new StreamSource(
Deploy3.class.getResourceAsStream("/WEB-INF/wsdl/EchoInnerService_schema1.xsd"),
"file://WEB-INF/wsdl/EchoInnerService_schema1.xsd"
)
);
metadata.add(
new StreamSource(
Deploy3.class.getResourceAsStream("/WEB-INF/wsdl/EchoInnerService.wsdl"),
"file://WEB-INF/wsdl/EchoInnerService.wsdl"
)
);
// properties = {
// }
Map properties = new HashMap();
// testEndpoint.className = fromjava.innerclass.EchoImpl.EchoInner
Object endpointImpl = fromjava.innerclass.EchoImpl.EchoInner.class.newInstance();
Endpoint endpoint = Endpoint.create(endpointImpl);
endpoint.setMetadata(metadata);
endpoint.setProperties(properties);
String address = "http://localhost:" + DEPLOY_PORT + "/fromjava.innerclass/EchoImpl.EchoInner";
System.out.println("Deploying endpoint to [" + address + "]");
endpoint.publish(address);
return endpoint;
}
}
class EndpointStopper {
EndpointStopper(final int port, final Endpoint endpoint) throws IOException {
final HttpServer server = HttpServer.create(new InetSocketAddress(port), 5);
final ExecutorService threads = Executors.newFixedThreadPool(2);
server.setExecutor(threads);
server.start();
HttpContext context = server.createContext("/stop");
context.setHandler(new HttpHandler() {
public void handle(HttpExchange msg) throws IOException {
System.out.println("Shutting down the Endpoint");
endpoint.stop();
System.out.println("Endpoint is down");
msg.sendResponseHeaders(200, 0);
msg.close();
server.stop(1);
threads.shutdown();
}
});
}
}