View Javadoc
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 }