このために、アンマーシャリングを使用してヘッダー変数を取得できます。このようなヘッダーがあるとします
<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を取得することです。このクラス。このクラスは次のようになります
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である必要があります。同様に 3 つの変数を作成し、
@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 を出力します