1 /**
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 *
6 * If it is not possible or desirable to put the notice in a particular
7 * file, then You may include the notice in a location (such as a LICENSE
8 * file in a relevant directory) where a recipient would be likely to look
9 * for such a notice.
10
11 *
12 */
13
14 /* ---------------------------------------------------------------------------
15 * U.S. Government, Department of the Army
16 * Army Materiel Command
17 * Research Development Engineering Command
18 * Communications Electronics Research Development and Engineering Center
19 * ---------------------------------------------------------------------------
20 */
21
22 package org.miloss.fgsms.agentcore;
23
24 import java.util.Iterator;
25 import javax.xml.namespace.QName;
26 import javax.xml.soap.*;
27 import javax.xml.ws.handler.soap.SOAPMessageContext;
28 import org.miloss.fgsms.common.Constants;
29 import org.miloss.fgsms.common.Utility;
30 import org.apache.log4j.Level;
31 import org.miloss.fgsms.common.Logger;;
32 import org.w3c.dom.Element;
33 import org.w3c.dom.Node;
34 import org.w3c.dom.NodeList;
35
36 /**
37 *
38 * @author AO
39 */
40 public class DependencyHelper {
41
42 public static String getThreadIdFromSoapHeader(SOAPMessageContext messageContext) {
43 try {
44 SOAPMessage message = messageContext.getMessage();
45 SOAPHeader soapHeader = message.getSOAPHeader();
46 if (soapHeader != null) {
47 Iterator childElements = soapHeader.getChildElements(new QName(FgsmsSoapHeaderConstants.namespace, FgsmsSoapHeaderConstants.threadid_message_localname));
48 if (childElements.hasNext()) {
49 SOAPElement e = (SOAPElement) childElements.next();
50 String t = e.getTextContent();
51 if (!Utility.stringIsNullOrEmpty(t)) {
52 return t;
53 }
54 t = e.getValue();
55 if (!Utility.stringIsNullOrEmpty(t)) {
56 return t;
57 }
58 Node c = e.getFirstChild();
59 if (c != null) {
60 t = c.getTextContent();
61 if (!Utility.stringIsNullOrEmpty(t)) {
62 return t;
63 }
64 t = e.getValue();
65 if (!Utility.stringIsNullOrEmpty(t)) {
66 return t;
67 }
68 }
69 }
70 NodeList elementsByTagNameNS = soapHeader.getElementsByTagNameNS(FgsmsSoapHeaderConstants.namespace, FgsmsSoapHeaderConstants.threadid_message_localname);
71 if (elementsByTagNameNS.getLength() > 0) {
72 Node node = elementsByTagNameNS.item(0);
73 String t = node.getTextContent();
74 if (!Utility.stringIsNullOrEmpty(t)) {
75 return t;
76 }
77 }
78 }
79
80 } catch (Exception ex) {
81 Logger.getLogger(org.miloss.fgsms.common.Constants.LoggerName).log(Level.WARN, "unable to get soap header for dependency detection", ex);
82 }
83
84
85 // messageContext.getMessage().getSOAPHeader().addHeaderElement(null).setTextContent(classname);
86 return null;
87 }
88
89 public static String getRelatedMessageIdFromSoapHeader(SOAPMessageContext messageContext) {
90 try {
91 SOAPMessage message = messageContext.getMessage();
92 SOAPHeader soapHeader = message.getSOAPHeader();
93 if (soapHeader != null) {
94 Iterator childElements = soapHeader.getChildElements(new QName(FgsmsSoapHeaderConstants.namespace, FgsmsSoapHeaderConstants.related_message_localname));
95 if (childElements.hasNext()) {
96 SOAPElement e = (SOAPElement) childElements.next();
97 String t = e.getTextContent();
98 if (!Utility.stringIsNullOrEmpty(t)) {
99 return t;
100 }
101 t = e.getValue();
102 if (!Utility.stringIsNullOrEmpty(t)) {
103 return t;
104 }
105 Node c = e.getFirstChild();
106 if (c != null) {
107 t = c.getTextContent();
108 if (!Utility.stringIsNullOrEmpty(t)) {
109 return t;
110 }
111 t = e.getValue();
112 if (!Utility.stringIsNullOrEmpty(t)) {
113 return t;
114 }
115 }
116 }
117 NodeList elementsByTagNameNS = soapHeader.getElementsByTagNameNS(FgsmsSoapHeaderConstants.namespace, FgsmsSoapHeaderConstants.related_message_localname);
118 if (elementsByTagNameNS.getLength() > 0) {
119 Node node = elementsByTagNameNS.item(0);
120 String t = node.getTextContent();
121 if (!Utility.stringIsNullOrEmpty(t)) {
122 return t;
123 }
124 }
125 }
126
127 } catch (Exception ex) {
128 Logger.getLogger(org.miloss.fgsms.common.Constants.LoggerName).log(Level.WARN, "unable to get soap header for dependency detection", ex);
129 }
130
131 // messageContext.getMessage().getSOAPHeader().addHeaderElement(null).setTextContent(classname);
132 return null;
133 }
134
135 public static void insertRelatedMessageHeader(String messageid, SOAPMessageContext messageContext) {
136
137 try {
138 SOAPMessage msg = messageContext.getMessage();
139 SOAPHeader header = msg.getSOAPHeader();
140 // get the part
141 if (header == null) {
142 SOAPPart soapPart = msg.getSOAPPart();
143 // get the envelope from the part
144 SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
145 // add a header to the envelope
146 header = soapEnvelope.addHeader();
147 }
148 // add a namespace declaration. headers MUST be "namespace-qualified"
149 // header.addNamespaceDeclaration("hehe", "http://www.hehe.org");
150 // now add the child element User
151 SOAPElement soapElement = header.addChildElement(new QName(FgsmsSoapHeaderConstants.namespace, FgsmsSoapHeaderConstants.related_message_localname));
152 // then add an attribute to the child element
153
154 // and finally add the value
155 soapElement.addTextNode(messageid);
156 } catch (Exception ex) {
157 Logger.getLogger(org.miloss.fgsms.common.Constants.LoggerName).log(Level.WARN, "unable to insert soap header for dependency detection", ex);
158 }
159 /*
160 * try { SOAPMessage message = messageContext.getMessage(); SOAPHeader
161 * soapHeader = message.getSOAPHeader(); if (soapHeader == null) { //
162 * Node env=message.getSOAPBody().getParentNode(); // Element
163 * createElement = env.getOwnerDocument().createElement("Header");
164 * SOAPFactory newInstance = SOAPFactory.newInstance(); SOAPElement
165 * createElement = newInstance.createElement("Header");
166 * message.getSOAPBody().getParentElement().addChildElement(createElement);
167 *
168 * SOAPElement addChildElement = createElement.addChildElement(new
169 * QName(FgsmsSoapHeaderConstants.namespace,
170 * FgsmsSoapHeaderConstants.related_message_localname));
171 * addChildElement.setTextContent(messageid);
172 *
173 * } else { SOAPElement addChildElement = soapHeader.addChildElement(new
174 * QName(FgsmsSoapHeaderConstants.namespace,
175 * FgsmsSoapHeaderConstants.related_message_localname));
176 * addChildElement.setTextContent(messageid); } // SOAPElement
177 * addChildElement =
178 * messageContext.getMessage().getSOAPHeader().addChildElement(new
179 * QName(FgsmsSoapHeaderConstants.namespace,
180 * FgsmsSoapHeaderConstants.related_message_localname)); //
181 * addChildElement.setTextContent(messageid); } catch (Exception ex) {
182 * Logger.getLogger(org.miloss.fgsms.common.Constants.LoggerName).log(Level.WARN, "unable
183 * to insert soap header for dependency detection", ex); }
184 */
185 }
186
187 public static void insertThreadIdHeader(String transactionthreadid, SOAPMessageContext messageContext) {
188 try {
189 SOAPMessage msg = messageContext.getMessage();
190 SOAPHeader header = msg.getSOAPHeader();
191 if (header == null) {
192 // get the part
193 SOAPPart soapPart = msg.getSOAPPart();
194 // get the envelope from the part
195 SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
196 // add a header to the envelope
197 header = soapEnvelope.addHeader();
198 }
199 // add a namespace declaration. headers MUST be "namespace-qualified"
200 // header.addNamespaceDeclaration("hehe", "http://www.hehe.org");
201 // now add the child element User
202 SOAPElement soapElement = header.addChildElement(new QName(FgsmsSoapHeaderConstants.namespace, FgsmsSoapHeaderConstants.threadid_message_localname));
203 // then add an attribute to the child element
204
205 // and finally add the value
206 soapElement.addTextNode(transactionthreadid);
207 } catch (Exception ex) {
208 Logger.getLogger(org.miloss.fgsms.common.Constants.LoggerName).log(Level.WARN, "unable to insert soap header for dependency detection", ex);
209 }
210 /*
211 * try { SOAPMessage message = messageContext.getMessage(); SOAPHeader
212 * soapHeader = message.getSOAPHeader();
213 *
214 * if (soapHeader == null) { // Node
215 * env=message.getSOAPBody().getParentNode(); // Element createElement =
216 * env.getOwnerDocument().createElement("Header"); SOAPElement header =
217 * message.getSOAPBody().getParentElement().addChildElement("Header");
218 * SOAPElement addChildElement = header.addChildElement(new
219 * QName(FgsmsSoapHeaderConstants.namespace,
220 * FgsmsSoapHeaderConstants.threadid_message_localname));
221 * addChildElement.setTextContent(transactionthreadid); } else {
222 * SOAPElement addChildElement = soapHeader.addChildElement(new
223 * QName(FgsmsSoapHeaderConstants.namespace,
224 * FgsmsSoapHeaderConstants.threadid_message_localname));
225 * addChildElement.setTextContent(transactionthreadid); } } catch
226 * (Exception ex) {
227 * Logger.getLogger(org.miloss.fgsms.common.Constants.LoggerName).log(Level.WARN, "unable
228 * to insert soap header for dependency detection", ex); }
229 */
230 }
231 }