in modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceBindingProvider.java [127:232]
public void start() {
// Get the invokers for the supported operations
RuntimeComponentService componentService = (RuntimeComponentService) service;
RuntimeWire wire = componentService.getRuntimeWire(binding);
Servlet servlet = null;
bindingListenerServlet = new HTTPBindingListenerServlet(binding, messageFactory );
for (InvocationChain invocationChain : wire.getInvocationChains()) {
Operation operation = invocationChain.getTargetOperation();
String operationName = operation.getName();
if (binding.getOperationSelector() != null || binding.getRequestWireFormat() != null) {
Invoker bindingInvoker = wire.getBindingInvocationChain().getHeadInvoker();
servlet = new HTTPRRBListenerServlet(binding, bindingInvoker, messageFactory);
break;
} else if (operationName.equals("get")) {
Invoker getInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setGetInvoker(getInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("conditionalGet")) {
Invoker conditionalGetInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setConditionalGetInvoker(conditionalGetInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("delete")) {
Invoker deleteInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setDeleteInvoker(deleteInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("conditionalDelete")) {
Invoker conditionalDeleteInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setConditionalDeleteInvoker(conditionalDeleteInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("put")) {
Invoker putInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setPutInvoker(putInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("conditionalPut")) {
Invoker conditionalPutInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setConditionalPutInvoker(conditionalPutInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("post")) {
Invoker postInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setPostInvoker(postInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("conditionalPost")) {
Invoker conditionalPostInvoker = invocationChain.getHeadInvoker();
bindingListenerServlet.setConditionalPostInvoker(conditionalPostInvoker);
servlet = bindingListenerServlet;
} else if (operationName.equals("service")) {
Invoker serviceInvoker = invocationChain.getHeadInvoker();
servlet = new HTTPServiceListenerServlet(binding, serviceInvoker, messageFactory);
break;
}
}
if (servlet == null) {
throw new IllegalStateException("No get or service method found on the service");
}
// Create our HTTP service listener Servlet and register it with the
// Servlet host
servletMapping = binding.getURI();
if (!servletMapping.endsWith("/")) {
servletMapping += "/";
}
if (!servletMapping.endsWith("*")) {
servletMapping += "*";
}
SecurityContext securityContext = new SecurityContext();
boolean isConfidentialityRequired = false;
boolean isAuthenticationRequired = false;
// find out which policies are active
if (binding instanceof PolicySetAttachPoint) {
List<Intent> intents = ((PolicySetAttachPoint)binding).getRequiredIntents();
for(Intent intent : intents) {
if (intent.getName().equals(AUTEHTICATION_INTENT)) {
isAuthenticationRequired = true;
} else if (intent.getName().equals(CONFIDENTIALITY_INTENT)) {
isConfidentialityRequired = true;
}
}
List<PolicySet> policySets = ((PolicySetAttachPoint)binding).getApplicablePolicySets();
for (PolicySet ps : policySets) {
for (Object p : ps.getPolicies()) {
if (ConfidentialityPolicy.class.isInstance(p) && isConfidentialityRequired) {
//Handle enabling and configuring SSL
ConfidentialityPolicy confidentialityPolicy = (ConfidentialityPolicy)p;
securityContext.setSSLEnabled(true);
securityContext.setSSLProperties(confidentialityPolicy.toProperties());
} else if(AuthenticationConfigurationPolicy.class.isInstance(p) && isAuthenticationRequired) {
// Handle authentication and user configuration
AuthenticationConfigurationPolicy authenticationConfiguration = (AuthenticationConfigurationPolicy)p;
securityContext.setAuthenticationEnabled(true);
securityContext.getUsers().clear();
securityContext.getUsers().addAll(authenticationConfiguration.getUsers());
}
}
}
}
servletHost.addServletMapping(servletMapping, servlet, securityContext);
}