public class SOAPCallingConvention extends Manageable
Manageable.State
Modifier and Type | Field and Description |
---|---|
protected static String |
REQUEST_NAMESPACE
The key used to store the name of the namespace in the request attributes.
|
protected static String |
RESPONSE_CONTENT_TYPE
The content type of the HTTP response.
|
protected static String |
RESPONSE_ENCODING
The response encoding format.
|
BOOTSTRAPPED, BOOTSTRAPPING, DEINITIALIZING, INITIALIZING, UNUSABLE, USABLE
Constructor and Description |
---|
SOAPCallingConvention(API api)
Creates a new
SOAPCallingConvention instance. |
Modifier and Type | Method and Description |
---|---|
protected FunctionRequest |
convertRequestImpl(HttpServletRequest httpRequest)
Converts an HTTP request to a XINS request (implementation method).
|
protected void |
convertResultImpl(FunctionResult xinsResult,
HttpServletResponse httpResponse,
Map<String,Object> backpack)
Converts a XINS result to an HTTP response (implementation method).
|
protected API |
getAPI()
Determines the current API.
|
protected String[] |
getSupportedMethods()
Determines which HTTP methods are supported for function invocations.
|
protected String[] |
getSupportedMethods(HttpServletRequest request)
Determines which HTTP methods are supported for function invocations,
for the specified request.
|
protected boolean |
matches(HttpServletRequest httpRequest)
Checks if the specified request can be handled by this calling
convention.
|
protected Element |
parseXMLRequest(HttpServletRequest httpRequest)
Parses XML from the specified HTTP request and checks that the content
type is correct.
|
protected Element |
parseXMLRequest(HttpServletRequest httpRequest,
boolean checkType)
Parses XML from the specified HTTP request and optionally checks that
the content type is correct.
|
protected Element |
readDataSection(Element parametersElem,
String functionName)
Reads the input parameters.
|
protected Map<String,String> |
readInputParameters(Element parametersElem,
String functionName)
Reads the input parameters.
|
protected void |
setDataElementAttribute(Element builder,
String attributeName,
String attributeValue,
String elementNameSpacePrefix)
Writes the attribute a output data element for the returned SOAP element.
|
protected Element |
soapElementTransformation(Map dataSection,
boolean input,
Element element,
boolean top)
Convert the values of element to the required format.
|
protected String |
soapInputValueTransformation(Type parameterType,
String value)
Transforms the value of a input SOAP parameter to the XINS equivalent.
|
protected String |
soapOutputValueTransformation(Type parameterType,
String value)
Transforms the value of a output XINS parameter to the SOAP equivalent.
|
protected void |
writeFaultSection(String functionName,
String namespaceURI,
FunctionResult xinsResult,
XMLOutputter xmlout)
Writes the fault section to the SOAP XML when an error code is returned
from the function call.
|
protected void |
writeOutputDataSection(String functionName,
FunctionResult xinsResult,
XMLOutputter xmlout)
Writes the output data section to the SOAP XML.
|
protected void |
writeOutputParameters(String functionName,
FunctionResult xinsResult,
XMLOutputter xmlout)
Writes the output parameters to the SOAP XML.
|
assertUsable, bootstrap, bootstrapImpl, deinit, deinitImpl, getState, init, initImpl, isBootstrapped, isUsable
protected static final String RESPONSE_ENCODING
protected static final String RESPONSE_CONTENT_TYPE
protected static final String REQUEST_NAMESPACE
public SOAPCallingConvention(API api) throws IllegalArgumentException
SOAPCallingConvention
instance.api
- the API, needed for the SOAP messages, cannot be null
.IllegalArgumentException
- if api == null
.protected String[] getSupportedMethods()
Each String
in the returned array must be one
supported method.
The returned array must not be null
, it must only
contain valid HTTP method names, so they may not contain whitespace, for
example. Duplicates will be ignored. HTTP method names must be in uppercase.
There must be at least one HTTP method supported for function invocations.
Note that OPTIONS must not be returned by this method, as it is not an HTTP method that can ever be used to invoke a XINS function.
HTTP OPTIONS requests are treated differently. For the path
*
the capabilities of the whole server are returned. For other
paths, the appropriate calling convention is determined, after which the
set of supported HTTP methods is returned to the called.
String
array, must
not be null
.protected boolean matches(HttpServletRequest httpRequest) throws Exception
This method will not throw any exception.
httpRequest
- the HTTP request to investigate, cannot be null
.true
if this calling convention is possibly
able to handle this request, or false
if it
definitely not able to handle this request.Exception
- if analysis of the request causes an exception;
false
will be assumed.protected FunctionRequest convertRequestImpl(HttpServletRequest httpRequest) throws InvalidRequestException, FunctionNotSpecifiedException
httpRequest
argument is not null
;
getSupportedMethods()
.
Note that getSupportedMethods(HttpServletRequest)
will not
have been called prior to this method call.
httpRequest
- the HTTP request.null
.InvalidRequestException
- if the request is considerd to be invalid.FunctionNotSpecifiedException
- if the request does not indicate the name of the function to execute.protected void convertResultImpl(FunctionResult xinsResult, HttpServletResponse httpResponse, Map<String,Object> backpack) throws IOException
null
.xinsResult
- the XINS result object that should be converted to an HTTP response,
will not be null
.httpResponse
- the HTTP response object to configure.backpack
- the backpack.IOException
- if the invocation of any of the methods in either
httpResponse
or httpRequest
caused an I/O
error.protected Map<String,String> readInputParameters(Element parametersElem, String functionName)
parametersElem
- the XML element which contains the parameters, cannot be null
functionName
- the name of the function called, cannot be null
.null
.protected Element readDataSection(Element parametersElem, String functionName) throws InvalidRequestException
parametersElem
- the XML element which contains the parameters and data section,
cannot be null
functionName
- the name of the function called, cannot be null
.null
.InvalidRequestException
- if the SOAP request is invalid.protected void writeFaultSection(String functionName, String namespaceURI, FunctionResult xinsResult, XMLOutputter xmlout) throws IOException
functionName
- the name of the function called.namespaceURI
- the namespace URI to use for the parameters.xinsResult
- the result of the call to the function.xmlout
- the XML outputter to write the parameters in.IOException
- if the data cannot be written to the XML outputter for any reason.protected void writeOutputParameters(String functionName, FunctionResult xinsResult, XMLOutputter xmlout) throws IOException
functionName
- the name of the function called.xinsResult
- the result of the call to the function.xmlout
- the XML outputter to write the parameters in.IOException
- if the data cannot be written to the XML outputter for any reason.protected void writeOutputDataSection(String functionName, FunctionResult xinsResult, XMLOutputter xmlout) throws IOException
functionName
- the name of the function called.xinsResult
- the result of the call to the function.xmlout
- the XML outputter to write the data section in.IOException
- if the data cannot be written to the XML outputter for any reason.protected String soapInputValueTransformation(Type parameterType, String value) throws InvalidSpecificationException
parameterType
- the type of the parameter, cannot be null
.value
- the value of the SOAP parameter, cannot be null
.null
.InvalidSpecificationException
- if the specification is incorrect.protected String soapOutputValueTransformation(Type parameterType, String value) throws InvalidSpecificationException
parameterType
- the type of the parameter, cannot be null
.value
- the value returned by the XINS function, cannot be null
.null
.InvalidSpecificationException
- if the specification is incorrect.protected Element soapElementTransformation(Map dataSection, boolean input, Element element, boolean top)
dataSection
- the specification of the elements, cannot be null
.input
- true
if it's the input parameter that should be transform,
false
if it's the output parameter.element
- the element node to process, cannot be null
.top
- true
if it's the top element, false
otherwise.null
.protected void setDataElementAttribute(Element builder, String attributeName, String attributeValue, String elementNameSpacePrefix)
builder
- the builder used to create the SOAP Element, cannot be null
.attributeName
- the name of the attribute, cannot be null
.attributeValue
- the value of the attribute, cannot be null
.elementNameSpacePrefix
- the namespace prefix of the parent element, can be null
.protected final API getAPI()
API
, never null
.protected String[] getSupportedMethods(HttpServletRequest request)
Each String
in the returned array must be one
supported method.
The returned array may be null
. If it is not, then the
returned array must only contain valid HTTP method names, so they may
not contain whitespace, for example. HTTP method names must be in uppercase.
There must be at least one HTTP method supported for function invocations.
Note that OPTIONS must not be returned by this method, as it is not an HTTP method that can ever be used to invoke a XINS function.
The set of supported methods must be a subset of the set returned by
getSupportedMethods()
.
The default implementation of this method returns the set returned by
getSupportedMethods()
.
request
- the request to determine the supported methods for.String
array, can be null
.protected Element parseXMLRequest(HttpServletRequest httpRequest) throws IllegalArgumentException, InvalidRequestException
This method uses a cache to optimize performance if either of the
parseXMLRequest
methods is called multiple times for the
same request.
Calling this method is equivalent with calling
parseXMLRequest(HttpServletRequest,boolean)
with the
checkType
argument set to true
.
httpRequest
- the HTTP request, cannot be null
.null
.IllegalArgumentException
- if httpRequest == null
.InvalidRequestException
- if the HTTP request cannot be read or cannot be parsed correctly.protected Element parseXMLRequest(HttpServletRequest httpRequest, boolean checkType) throws IllegalArgumentException, InvalidRequestException
Since XINS 1.4.0, this method uses a cache to optimize performance if
either of the parseXMLRequest
methods is called multiple
times for the same request.
httpRequest
- the HTTP request, cannot be null
.checkType
- flag indicating whether this method should check that the content
type of the request is text/xml.null
.IllegalArgumentException
- if httpRequest == null
.InvalidRequestException
- if the HTTP request cannot be read or cannot be parsed correctly.See http://www.xins.org/.