以下是一个示例代码,用于从SOAP消息中提取和解析SOAP头部:
import javax.xml.soap.*;
public class SOAPHeaderExample {
public static void main(String[] args) {
try {
// 创建一个SOAP消息
SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
// 获取SOAP消息的头部
SOAPHeader soapHeader = soapMessage.getSOAPHeader();
// 创建一个SOAP头部元素
SOAPElement headerElement = soapHeader.addChildElement("MyHeader", "ns1", "http://example.com/namespace");
headerElement.addChildElement("Username").setTextContent("myusername");
headerElement.addChildElement("Password").setTextContent("mypassword");
// 打印SOAP消息的XML表示
soapMessage.writeTo(System.out);
// 从SOAP消息中获取头部元素
SOAPHeader receivedHeader = soapMessage.getSOAPHeader();
if (receivedHeader != null) {
// 获取指定命名空间和名称的头部元素
SOAPElement receivedHeaderElement = (SOAPElement) receivedHeader.getChildElements(
new QName("http://example.com/namespace", "MyHeader")).next();
// 获取头部元素中的子元素值
String username = receivedHeaderElement.getElementsByTagNameNS(
"http://example.com/namespace", "Username").item(0).getTextContent();
String password = receivedHeaderElement.getElementsByTagNameNS(
"http://example.com/namespace", "Password").item(0).getTextContent();
// 打印头部元素的值
System.out.println("Username: " + username);
System.out.println("Password: " + password);
} else {
System.out.println("No SOAP header found.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
此示例创建一个SOAP消息,并添加一个名为"MyHeader"的SOAP头部元素,其中包含一个用户名和密码。然后,它将SOAP消息的XML表示打印到控制台,并从接收到的SOAP消息中提取和解析头部元素的值。