Add winery source code
[vfc/nfvo/wfengine.git] / winery / org.eclipse.winery.generators.ia / src / main / resources / template / java / AbstractIAService.java.template
1 package IA_PACKAGE;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map.Entry;
6
7 import javax.annotation.Resource;
8 import javax.xml.ws.WebServiceContext;
9
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;
15
16 import org.eclipse.winery.highlevelrestapi.HighLevelRestApi;
17
18 public abstract class AbstractIAService {
19
20         @Resource
21         private WebServiceContext context;
22
23         protected void sendResponse (HashMap<String,String> returnParameters) {
24         
25                 // Extract message
26                 WrappedMessageContext wrappedContext = (WrappedMessageContext) context.getMessageContext();
27                 Message message = wrappedContext.getWrappedMessage();
28                 
29                 // Extract headers from message
30                 List<Header> headers = CastUtils.cast((List<?>) message.get(Header.HEADER_LIST));
31                 
32                 // Find ReplyTo and MessageID SOAP Header
33                 String replyTo = null;
34                 String messageID = null;
35                 for (Header iter : headers) {
36                                                 
37                         Object headerObject = iter.getObject();
38
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();
44                                 
45                                 // Extract ReplyTo Header value
46                                 if ("ReplyTo".equals(localPart)) {
47                                         replyTo = content;
48                                 }
49                                 
50                                 // Extract MessageID Header value
51                                 if ("MessageID".equals(localPart)) {
52                                         messageID = content;
53                                 }
54                         }                                               
55                 }
56                 
57                 // Create asynchronous SOAP Response Message
58                 StringBuilder builder = new StringBuilder();
59                 
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>");
65
66                 // Insert return parameters into asynchronous SOAP Response Message
67                 for (Entry<String, String> paramIter : returnParameters.entrySet()) {
68                         
69                         String key = paramIter.getKey();
70                         String value = paramIter.getValue();
71                         
72                         builder.append("         <" + key + ">" + value + "</" + key +">");
73                 }
74
75                 builder.append("      </sch:invokeResponse>");                  
76                 builder.append("        </soapenv:Body>");
77                 builder.append("</soapenv:Envelope>");
78                 
79                 // Send SOAP Response Message back to requester
80                 if(replyTo == null) {
81                         System.err.println("No 'ReplyTo' header found!\nTherefore, reply message is printed here:\n" + builder.toString());
82                 } else {
83                         HighLevelRestApi.Post(replyTo, builder.toString(), "");
84                 }
85         }
86 }