001 package soapHeaders;
002
003 import com.bea.control.JwsContext;
004 import com.bea.jws.Protocol;
005 import org.xmlsoap.schemas.soap.envelope.HeaderDocument;
006 import com.bea.xml.XmlException;
007 import javax.xml.soap.Node;
008 import org.w3c.dom.Element;
009
010
011 public class mySoap11Service implements com.bea.jws.WebService
012 {
013 /** @common:control */
014 private soapHeaders.mySoap11ServiceControl myServiceControl;
015
016 static final long serialVersionUID = 1L;
017
018 /**
019 * In this method, a header is created using HeaderDocument.Factory.Parse.
020 * The FirstChild is extracted into header, which is type Element. The header
021 * is put into place using the JwsContext service method, setOutputHeaders.
022 *
023 * The format of the Element header is:
024 * firstChild
025 * localName = "Header"
026 * name = "SOAP-ENV:Header"
027 * namespaceURI= "http://schemas-xmlsoap.org/soap/envelope/"
028 * firstChild
029 * localName = "content"
030 * name = "my:content"
031 * namespaceURI= "http://my.com/uri/"
032 * firstChild
033 * data = "Context Text"
034 *
035 * @common:operation
036 */
037 public void myMethod()
038 {
039 String fromGetHeader[];
040 fromGetHeader = new String[5];
041 String fromGetThisProtocol;
042 /*
043 * This method uses an XMLBean representation of the SOAP header and makes
044 * and instance of it using HeaderDocument.Factory.parse
045 */
046 HeaderDocument hd = null;
047 try
048 {
049 hd = HeaderDocument.Factory.parse(
050 "<SOAP-ENV:Header xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
051 "<my:content xmlns:my=\"http://my.com/uri/\">Content Text</my:content>" +
052 "</SOAP-ENV:Header>");
053 }
054 catch (XmlException xe)
055 {
056 //should do something here.
057 }
058 /*
059 * Once there is a HeaderDocument we can obtain a Node using the newDomNode() method.
060 * Using the getFirstChild() operation yields us the Header Node which is cast to an Element.
061 * This Element is then passed to setOutputHeaders( Element[] ) on the service control.
062 */
063
064 Element header = (Element) hd.newDomNode().getFirstChild();
065 myServiceControl.setOutputHeaders(new Element[] { header });
066
067 fromGetHeader = myServiceControl.GetHeader(); // returns the header name
068 fromGetThisProtocol = myServiceControl.getThisProtocol(); // returns the protocol name
069 }
070
071
072 /**
073 * @common:context
074 */
075 JwsContext context; // Create a context for the service
076
077 /**
078 * The header can be obtained by using the JwsContext interface getInputHeaders() is the
079 * compliment to setOutputHeaders() used in myMethod to add the header and the result is
080 * formated exactly the same way. You can extract some of the header by using the methods
081 * that come with the Element interface.
082 *
083 * getNodeName extracts the header name "soapenv:Header"
084 * getTagName extracts the tag name "soapenv:Header"
085 *
086 * Note that the header that is retrieved is that of the SOAP envelope. To get the rest
087 * of the header information you have to traverse the tree that is created. See the
088 * multipleHeaders.jws.
089 *
090 * @common:operation
091 */
092 public String[] GetHeader()
093 {
094 String nodeNameValue[];
095 int i;
096 String firstTag;
097
098
099 Element[] myHeaders = context.getInputHeaders(); // Get the header
100 nodeNameValue = new String[myHeaders.length];
101
102 for(i=0; i<myHeaders.length; i++)
103 {
104 nodeNameValue[i] = myHeaders[i].getNodeName(); // Extract header name
105 firstTag = myHeaders[i].getTagName(); // Extract Tag name
106 }
107 return nodeNameValue; // Return header name
108 }
109
110 /**
111 * getProtocol is in the JwsContext interface. It returns a type Protocol,
112 * which is made up of an ID and the text name of the protocol type. The Protocol
113 * class also contains the list of protocols that it refers to.
114 *
115 * The Protocol class has a method by the name of getName that returns the
116 * name of the protocol. So, by using getName, you can tell if this is a
117 * SOAP protocol or some other type of protocol.
118 *
119 * @common:operation
120 */
121 public String getThisProtocol()
122 {
123 Protocol myProtocol = context.getProtocol(); // Get the protocol info
124
125 return myProtocol.getName(); // Extract and return protocol type
126 }
127 }
|