在这个例子中我们看到,Workshop知道表示SOAP Header的XMLBean文档。我们创建一个使用HeaderDocument.Factory.parse(String)的实例。String是我们想要包括在SOAP Header中的XML内容。任何操纵string或者XMLBean自身的普通方法都可用于创建该内容。
只要存在HeaderDocument,我们就可以使用newDomNode()方法获得Node。这个Node是XMLBeans在文档中用作占位符的合成根节点。使用getFirstChild()操作生成转换为Element的Header Node。然后,这个Element在服务控件中被传递到setOutputHeaders( Element[] )。
同样,org.w3c.dom.Document可以用作Element工厂。无需尝试编写关于DOM编程的教程,以下是如何创建Document的例子,然后把它用作一个工厂来创建Header Elements。
package myPackage;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class MyService implements com.bea.jws.WebService
{
/** @common:control */
private myPackage.MyServiceCtl myServiceControl;
static final long serialVersionUID = 1L;
/**
* @common:operation
*/
public void myMethod()
{
Document doc = null; //allocate a document
try
{
//create the document
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
doc = factory.newDocumentBuilder().newDocument();
}
catch (ParserConfigurationException pce)
{
//should do something here.
}
// create the <SOAP-ENV:Header> element
Element header = doc.createElementNS(
"http://schemas.xmlsoap.org/soap/envelope/",
"SOAP-ENV:Header");
// create the <my:Content> element
Element headerContent = doc.createElementNS(
"http://my.org/uri/",
"my:Content");
header.appendChild(headerContent);
// insert the text in the content node
headerContent.appendChild(doc.createTextNode("Content Text"));
Attr nsAttr = doc.createAttributeNS(
"http://www.w3.org/2000/xmlns/",
"xmlns:my");
nsAttr.setValue("http://my.org/uri/");
headerContent.setAttributeNodeNS(nsAttr);
myServiceControl.setOutputHeaders(new Element[] {header});
myServiceControl.serviceMethod("argument");
}
}
上述方法讲述了如何使用javax.xml.parsers.DocumentBuilder和javax.xml.parsers.DocumentBuilderFactory 创建Document,以及如何使用Document构造所需要的 Element。