为此,您可以使用解组来获取标头变量。
假设你有这样的标题
<soapenv:Header>
<v2:XHeader>
<v2:name>xxx</v2:srvcName>
<v2:version>1.0</v2:srvcVersion>
<v2:sender>yyy</v2:senderApp>
</v2:XHeader>
</soapenv:Header>
你的目标是在你的 web 服务的端点方法中获取值 xxx,1.0,yyy。为此你要做的是,创建一个类说它的名字是 MyHeader.java 以便我们将传入的标头值解组到这个类。这个类看起来像
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "XHeader", propOrder = {
"name",
"version",
"sender"
})
@XmlRootElement(name = "XHeader")
public class MyHeader {
@XmlElement(required = true)
protected String name;
@XmlElement(required = true)
protected String version;
@XmlElement(required = true)
protected String sender;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public String getVersion() {
return version;
}
public void setVersion(String value) {
this.version = value;
}
public String getSender() {
return sender;
}
public void setSnder(String value) {
this.sender = value;
}
}
我所做的是,我们创建了一个 java 类并用
注释它
@XmlRootElement(name = "XHeader")
所以我们告诉xml的根元素应该是XHeader。
同样创建了三个变量并用
注释
@XmlElement(required = true)
。现在要做的是在端点方法内部,您创建一个 jaxbcontext 对象,如
JAXBContext jaxbContext = JAXBContext.newInstance(MyHeaderType.class);
SoapMessage requestMessage = (SoapMessage) messageContext.getRequest();
SoapHeader reqheader = requestMessage.getSoapHeader();
Iterator<SoapHeaderElement> itr = reqheader.examineAllHeaderElements();
while (itr.hasNext()) {
SoapHeaderElement ele = itr.next();
MyHeaderType headerType=(MyHeaderType)jaxbContext.createUnmarshaller().unmarshal(ele.getSource());
System.out.println(esbHeaderType.getName());
System.out.println(esbHeaderType.getVersion());
System.out.println(esbHeaderType.getSender());
}
.现在它将打印值 xxx,1.0,yyy