
io.github.factoryfx.soap.WebServiceRequestDispatcher Maven / Gradle / Ivy
package io.github.factoryfx.soap;
import org.w3c.dom.Element;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.EndpointReference;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.Principal;
import java.util.*;
import java.util.stream.Collectors;
public class WebServiceRequestDispatcher {
private final Object webService;
private final HashMap dispatchMap = new HashMap<>();
static final class RequestContext {
final HttpServletRequest request;
final HttpServletResponse response;
SOAPMessage soapMessage;
RequestContext(HttpServletRequest request, HttpServletResponse response, SOAPMessage soapMessage) {
this.request = request;
this.response = response;
this.soapMessage = soapMessage;
}
}
private final ThreadLocal msgContext = new ThreadLocal<>();
private final WebServiceContext webServiceContext = new WebServiceContext() {
@Override
public SOAPMessageContext getMessageContext() {
return new SOAPMessageContext() {
@Override
public SOAPMessage getMessage() {
return ctx().soapMessage;
}
@Override
public void setMessage(SOAPMessage message) {
ctx().soapMessage = message;
}
@Override
public Object[] getHeaders(QName header, JAXBContext context, boolean allRoles) {
throw new UnsupportedOperationException();
}
@Override
public Set getRoles() {
return Collections.emptySet();
}
@Override
public void setScope(String name, Scope scope) {
throw new UnsupportedOperationException();
}
@Override
public Scope getScope(String name) {
throw new UnsupportedOperationException();
}
@Override
public int size() {
return 6;
}
private RequestContext ctx() {
return msgContext.get();
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean containsKey(Object key) {
if (key == null)
return false;
switch (key.toString()) {
case HTTP_REQUEST_HEADERS:
case HTTP_REQUEST_METHOD:
case HTTP_RESPONSE_CODE:
case HTTP_RESPONSE_HEADERS:
case SERVLET_REQUEST:
case SERVLET_RESPONSE:
return true;
}
return false;
}
@Override
public boolean containsValue(Object value) {
if (value == ctx().request ||
value == ctx().response ||
value == ctx().soapMessage)
return true;
return false;
}
@Override
public Object get(Object key) {
if (key == null)
return false;
switch (key.toString()) {
case HTTP_REQUEST_HEADERS: return buildHeaders(ctx().request);
case HTTP_REQUEST_METHOD: return ctx().request.getMethod();
case HTTP_RESPONSE_CODE: return ctx().response.getStatus();
case HTTP_RESPONSE_HEADERS: return buildHeaders(ctx().response);
case SERVLET_REQUEST: return ctx().request;
case SERVLET_RESPONSE: return ctx().response;
}
return null;
}
@Override
public Object put(String key, Object value) {
throw new UnsupportedOperationException();
}
@Override
public Object remove(Object key) {
throw new UnsupportedOperationException();
}
@Override
public void putAll(Map extends String, ?> m) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
throw new UnsupportedOperationException();
}
@Override
public Set keySet() {
return new HashSet<>(Arrays.asList(HTTP_REQUEST_HEADERS,HTTP_REQUEST_METHOD,HTTP_RESPONSE_CODE,HTTP_RESPONSE_HEADERS,SERVLET_REQUEST,SERVLET_RESPONSE));
}
@Override
public Collection
© 2015 - 2025 Weber Informatics LLC | Privacy Policy