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