/**
* Copyright 2015 Nortal Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language governing permissions and limitations under the
* License.
**/
package com.nortal.jroad.client.service.callback;
import java.util.Collection;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import org.springframework.ws.WebServiceMessage;
import org.springframework.ws.client.core.WebServiceMessageCallback;
import org.springframework.ws.soap.saaj.SaajSoapMessage;
import com.nortal.jroad.client.service.configuration.XRoadServiceConfiguration;
import com.nortal.jroad.model.XRoadAttachment;
/**
* <code>WebServiceMessageCallback</code> implementation that sets envelope namespaces for SOAP envelope.
*
* @author Rando Mihkelsaar
* @author Kait Kasak (kait.kasak@nortal.com)
* @author Lauri Lättemäe (lauri.lattemae@nortal.com) - protocol 4.0
*/
public class XRoadMessageCallback implements WebServiceMessageCallback {
private final Collection<XRoadAttachment> attachments;
private final XRoadServiceConfiguration serviceConfiguration;
private MessageCallbackNamespaceStrategy protocolVersionStrategy;
public XRoadMessageCallback(XRoadServiceConfiguration serviceConfiguration, Collection<XRoadAttachment> attachments) {
this.serviceConfiguration = serviceConfiguration;
this.attachments = attachments;
// create according to protocol version
switch (serviceConfiguration.getProtocolVersion()) {
default:
this.protocolVersionStrategy = new XRoadProtocolNamespaceStrategyV4();
break;
}
}
public void doWithMessage(WebServiceMessage message) {
SaajSoapMessage saajMessage = (SaajSoapMessage) message;
try {
// Add attachments
if (attachments != null) {
for (XRoadAttachment attachment : attachments) {
saajMessage.addAttachment("<" + attachment.getCid() + ">", attachment, attachment.getContentType());
}
}
SOAPMessage soapmess = saajMessage.getSaajMessage();
SOAPEnvelope env = soapmess.getSOAPPart().getEnvelope();
protocolVersionStrategy.addNamespaces(env);
protocolVersionStrategy.addXTeeHeaderElements(env, serviceConfiguration);
} catch (SOAPException e) {
throw new RuntimeException(e);
}
}
public XRoadServiceConfiguration getServiceConfiguration() {
return serviceConfiguration;
}
}