/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.xml.ws; import gw.internal.xml.XmlTypeResolver; import gw.internal.xml.ws.server.WebservicesRequest; import gw.internal.xml.ws.server.WebservicesServletBase; import gw.internal.xml.ws.server.WsiServiceInfo; import gw.internal.xml.xsd.typeprovider.schemaparser.SoapVersion; import gw.lang.function.Function1; import gw.lang.reflect.IMethodInfo; import gw.lang.reflect.IType; import gw.xml.XmlElement; import gw.xml.XmlParseOptions; import gw.xml.XmlSerializationOptions; import gw.xml.ws.DefaultWsiInvocationHandler; import gw.xml.ws.HttpHeaders; import gw.xml.ws.WebServiceException; import gw.xml.ws.WsiAuthenticationException; import gw.xml.ws.WsiInvocationContext; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; public class WsiInvocationContextImpl extends WsiInvocationContext { private XmlElement _requestEnvelope; private HttpHeaders _requestHttpHeaders; private XmlElement _requestSoapHeaders; private HttpHeaders _responseHttpHeaders; private List<XmlElement> _responseSoapHeaders; private HttpServletRequest _request; private XmlSerializationOptions _xmlSerializationOptions; private WebService _webService; private WebservicesServletBase _webservicesServletBase; private IType _webserviceType; private SoapVersion _soapVersion; private WebservicesRequest _webservicesRequest; private List<Callable> _finallyList; private boolean _mtomEnabled; @Override public HttpServletRequest getHttpServletRequest() { return _request; } @Override public HttpHeaders getRequestHttpHeaders() { return _requestHttpHeaders; } @Override public XmlElement getRequestEnvelope() { return _requestEnvelope; } @Override public XmlElement getRequestSoapHeaders() { return _requestSoapHeaders; } @Override public HttpHeaders getResponseHttpHeaders() { if ( _responseHttpHeaders == null ) { _responseHttpHeaders = new HttpHeaders(); } return _responseHttpHeaders; } @Override public List<XmlElement> getResponseSoapHeaders() { if ( _responseSoapHeaders == null ) { _responseSoapHeaders = new ArrayList<XmlElement>(); } return _responseSoapHeaders; } @Override public XmlSerializationOptions getXmlSerializationOptions() { if ( _xmlSerializationOptions == null ) { _xmlSerializationOptions = _webService._serializationOptions; if ( _xmlSerializationOptions == null ) { _xmlSerializationOptions = new XmlSerializationOptions(); } else { _xmlSerializationOptions = _xmlSerializationOptions.copy(); } } return _xmlSerializationOptions; } @Override public void setXmlSerializationOptions( XmlSerializationOptions xmlSerializationOptions ) { _xmlSerializationOptions = xmlSerializationOptions; } @Override public void setMtomEnabled( boolean mtomEnabled ) { _mtomEnabled = mtomEnabled; } @Override public boolean isMtomEnabled() { return _mtomEnabled; } public List<XmlElement> getResponseSoapHeadersDirect() { return _responseSoapHeaders; } public HttpHeaders getResponseHttpHeadersDirect() { return _responseHttpHeaders; } public WebService getWebService() { return _webService; } public void setWebService( WebService webservice ) { _webService = webservice; } public void setWebservicesServletBase( WebservicesServletBase webservicesServletBase ) { _webservicesServletBase = webservicesServletBase; } public WebservicesServletBase getWebservicesServletBase() { return _webservicesServletBase; } public void setWebserviceType( IType type ) { _webserviceType = type; } public IType getWebserviceType() { return _webserviceType; } public SoapVersion getSoapVersion() { return _soapVersion; } public void setSoapVersion( SoapVersion soapVersion ) { _soapVersion = soapVersion; } public void setWebservicesRequest( WebservicesRequest request ) { _webservicesRequest = request; } public WebservicesRequest getWebservicesRequest() { return _webservicesRequest; } public void setFinallyList( List<Callable> finallyList ) { _finallyList = finallyList; } public List<Callable> getFinallyList() { return _finallyList; } public void setRequestHttpHeaders( HttpHeaders httpHeaders ) { _requestHttpHeaders = httpHeaders; } public void setHttpServletRequest( HttpServletRequest httpServletRequest ) { _request = httpServletRequest; } public void setRequestEnvelope( XmlElement envelope ) { _requestEnvelope = envelope; } public void setRequestSoapHeaders( XmlElement headers ) { _requestSoapHeaders = headers; } public static class WebService { public XmlParseOptions _parseOptions; public XmlSerializationOptions _serializationOptions; public XmlTypeResolver _typeResolver; public Class<?> _backingClass; public WsiServiceInfo _serviceInfo; public Object _worker; public Function1 _requestTransform; public Function1 _responseTransform; public Function1 _requestXmlTransform; public Function1 _responseXmlTransform; public DefaultWsiInvocationHandler _invocationHandler; } @Override public void preExecute(XmlElement requestElement, IMethodInfo method) throws WebServiceException, WsiAuthenticationException, IOException { getWebservicesServletBase().preUnmarshal( getWebserviceType(), getRequestSoapHeaders(), requestElement, method, getFinallyList(), getWebservicesRequest(), requestElement.getQName() ); } }