36.7.3 処理できるSOAPヘッダの設定方法
(1) SOAPヘッダをハンドラで設定する場合
javax.xml.ws.handler.soap.SOAPHandlerインタフェースを実装したハンドラクラスを作成し,getHeaders()メソッドで,処理できるSOAPヘッダのQNameを含むjava.util.Setを返します。ハンドラでの設定例を次に示します。
public class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {
private final static Set<QName> headers;
static {
headers = new HashSet<QName>();
headers.add(new QName("http://test.org/handler/", "headerA"));
}
public Set<QName> getHeaders(){
return headers;
}
(以下,そのほかの実装は省略)
} |
(2) SOAPヘッダをWebサービス実装クラスで設定する場合
SEIを起点として開発する場合,Webサービス実装クラスにjavax.jws.WebParamアノテーションでアノテートした引数を持つメソッドを定義します。javax.jws.WebParamアノテーションでは,次に示す設定を定義します。
- header属性にtrueを設定する。
- mode属性にjavax.jws.WebParam.Mode.INまたはjavax.jws.WebParam.Mode.INOUTを設定する。
Webサービス実装クラスでの設定例を次に示します。
@WebService
@SOAPBinding (parameterStyle= javax.jws.soap.SOAPBinding.ParameterStyle.BARE)
@HandlerChain (file="handlerchainfile.xml")
public class MyWebService{
@WebMethod(operationName = "webMethod")
public String webMethod(
@WebParam(targetNamespace="http://test.org/handler/", name="message")
String message,
@WebParam(targetNamespace="http://test.org/handler/", name="headerS", header = true, WebParam.Mode.IN)
String headerS
){
(以下,メソッドの実装は省略)
}
} |
WSDLを起点に開発する場合は,WSDL 1.1仕様およびApplication ServerのJAX-WS機能のサポート範囲内で,soap:header要素をWSDLに記述します。Application ServerのJAX-WS機能でのsopa:header要素の記述については,「20.1.22 soap:header要素」を参照してください。
(3) SOAPヘッダをWebサービスクライアントで設定する場合
接続するWebサービスのメタデータであるWSDLに,soap:header要素が含まれる場合は,そのsoap:header要素を処理できます。WSDLの例を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://test.org/handler/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://test.org/handler/"
name="HandlerTest01Service">
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0"
targetNamespace="http://test.org/handler/">
<xs:element name="headerCL" nillable="true" type="xs:string"></xs:element>
<xs:element name="message" nillable="true" type="xs:string"></xs:element>
<xs:element name="testResponse" nillable="true" type="xs:string"></xs:element>
</xs:schema>
</types>
<message name="test">
<part name="message" element="tns:message"></part>
<part name="headerCL" element="tns:headerCL"></part>
</message>
<message name="testResponse">
<part name="testResponse" element="tns:testResponse"></part>
<part name="headerCL" element="tns:headerCL"></part>
</message>
<portType name="HandlerTest01">
<operation name="test" parameterOrder="message headerCL">
<input message="tns:test"></input>
<output message="tns:testResponse"></output>
</operation>
</portType>
<binding name="HandlerTest01Binding" type="tns:HandlerTest01">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="test">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal" parts="message"></soap:body>
<soap:header message="tns:test" part="headerCL" use="literal"></soap:header>
</input>
<output>
<soap:body use="literal" parts="testResponse"></soap:body>
<soap:header message="tns:testResponse" part="headerCL" use="literal"></soap:header>
</output>
</operation>
</binding>
<service name="HandlerTest01Service">
<port name="HandlerTest01Port" binding="tns:HandlerTest01Binding">
<soap:address location="http://localhost:80/SOAPHeaderTest/HandlerTestService431"></soap:address>
</port>
</service>
</definitions> |
この場合は,要素名{http://test.org/handler/}headerCLのSOAPヘッダを処理できます。WSDLのsoap:header要素については「20.1.22 soap:header要素」を参照してください。