Warning |
---|
This feature has been broken since Blueriq 10 and it was fixed in Blueriq 12.8. See this known issue for details. |
...
UI Text Box |
---|
|
At the moment, hooks do not exist for processing the SOAP response. These hooks are used for processing the request only. |
Step-by-step guide
Create a class that implements com.aquima.interactions.communication.ISoapMessageHandler
Code Block |
---|
|
import com.aquima.interactions.communication.ISoapMessageContext;
import com.aquima.interactions.communication.ISoapMessageHandler;
public class WSSTimestampSoapHandler implements ISoapMessageHandler {
@Override
public void handle(ISoapMessageContext context) {}
} |
UI Text Box |
---|
|
Three demo ISoapMessageHandler implementations are attached to this page. The code is provided for demonstration purposes only and should not be used in a production environment. |
Annotate the class with com.aquima.web.config.annotation.AquimaSoapMessageHandler
Make sure you provide a unique name to the handler:
...
UI Text Box |
---|
|
The AquimaSoapMessageHandler annotation makes the class a Spring bean. Make sure the Spring configuration scans the package the handler resides in for component annotations (using context:component-scan for example). |
Implement the handle(ISoapMessageContext) method
The following code is adapted from com.aquima.web.communication.WSSTimestampSoapHandler and demonstrates adding the WS-Security Timestamp header:
Code Block |
---|
|
@AquimaSoapMessageHandler(value = "WSSTimestamp")
public class WSSTimestampSoapHandler implements ISoapMessageHandler {
final String WSSE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
final String WSU = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
final String SOAPENV = "http://schemas.xmlsoap.org/soap/envelope/";
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
@Override
public void handle(ISoapMessageContext context) {
Calendar calendar = Calendar.getInstance();
// Add custom namespaces
context.setNamespace("wsu", WSU);
context.setNamespace("wsse", WSSE);
// Add a new SOAP header
IXmlElementContext security = context.addHeader(new QualifiedName(WSSE, "Security"));
security.setAttribute(new QualifiedName(SOAPENV, "mustUnderstand"), "1");
// Add a child to the Security header
IXmlElementContext timestamp = security.addElement(new QualifiedName(WSU, "Timestamp"));
timestamp.setAttribute(new QualifiedName(WSU, "Id"), "TS-" + GUID.generate());
IXmlElementContext created = timestamp.addElement(new QualifiedName(WSU, "Created"));
created.setValue(dateFormat.format(calendar.getTime()), false);
IXmlElementContext expires = timestamp.addElement(new QualifiedName(WSU, "Expires"));
calendar.add(Calendar.MINUTE, 5);
expires.setValue(dateFormat.format(calendar.getTime()), false);
}
} |
Specify the SoapServiceCall objects that should use this handler by modifying aquima.properties
Code Block |
---|
blueriq.soap-service-calls.<service_call>.handlers=<comma_separated_list_of_handler_names> |
...
Note |
---|
|
Before Blueriq 12.8, the property was called soap_service_calls.<service_call>.handlers . |
Test the result
Capturing the SOAP request or setting the log level to debug will show the request having a new header. It should look something like:
Code Block |
---|
|
<?xml version="1.0"?>
<soapenv:Envelope xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1">
<wsu:Timestamp wsu:Id="TS-930e7809-2cde-415b-ad5c-0af0b9127083">
<wsu:Created>2015-04-02T09:46:58.824Z</wsu:Created>
<wsu:Expires>2015-04-02T09:51:58.824Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
<soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
...
</soapenv:Body>
</soapenv:Envelope> |
.NET registration
In the .NET runtime, the usual registration mechanism is used to register a SOAP message handler:
...