3 import java.util.HashMap;
5 import java.util.Map.Entry;
7 import javax.annotation.Resource;
8 import javax.xml.ws.WebServiceContext;
10 import org.apache.cxf.headers.Header;
11 import org.apache.cxf.helpers.CastUtils;
12 import org.apache.cxf.jaxws.context.WrappedMessageContext;
13 import org.apache.cxf.message.Message;
14 import org.w3c.dom.Node;
16 import org.eclipse.winery.highlevelrestapi.HighLevelRestApi;
18 public abstract class AbstractIAService {
21 private WebServiceContext context;
23 protected void sendResponse (HashMap<String,String> returnParameters) {
26 WrappedMessageContext wrappedContext = (WrappedMessageContext) context.getMessageContext();
27 Message message = wrappedContext.getWrappedMessage();
29 // Extract headers from message
30 List<Header> headers = CastUtils.cast((List<?>) message.get(Header.HEADER_LIST));
32 // Find ReplyTo and MessageID SOAP Header
33 String replyTo = null;
34 String messageID = null;
35 for (Header iter : headers) {
37 Object headerObject = iter.getObject();
39 // Unmarshall to org.w3c.dom.Node
40 if (headerObject instanceof Node) {
41 Node node = (Node) headerObject;
42 String localPart = iter.getName().getLocalPart();
43 String content = node.getTextContent();
45 // Extract ReplyTo Header value
46 if ("ReplyTo".equals(localPart)) {
50 // Extract MessageID Header value
51 if ("MessageID".equals(localPart)) {
57 // Create asynchronous SOAP Response Message
58 StringBuilder builder = new StringBuilder();
60 builder.append("<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:sch='http://siserver.org/schema'>");
61 builder.append(" <soapenv:Header/>");
62 builder.append(" <soapenv:Body>");
63 builder.append(" <sch:invokeResponse>");
64 builder.append(" <sch:MessageID>" + messageID + "</sch:MessageID>");
66 // Insert return parameters into asynchronous SOAP Response Message
67 for (Entry<String, String> paramIter : returnParameters.entrySet()) {
69 String key = paramIter.getKey();
70 String value = paramIter.getValue();
72 builder.append(" <" + key + ">" + value + "</" + key +">");
75 builder.append(" </sch:invokeResponse>");
76 builder.append(" </soapenv:Body>");
77 builder.append("</soapenv:Envelope>");
79 // Send SOAP Response Message back to requester
81 System.err.println("No 'ReplyTo' header found!\nTherefore, reply message is printed here:\n" + builder.toString());
83 HighLevelRestApi.Post(replyTo, builder.toString(), "");