Java API for XML-Based Web Services (JAX-WS) は、サービス・エンドポイント操作の動的呼び出しをサポートします。
JAX-WS は、新規の動的ディスパッチ・クライアント API を備えています。 これは、既存の Java API for XML-based RPC (JAX-RPC) ベースの 動的起動インターフェース (DII) よりも 汎用的であり、柔軟性があります。ディスパッチ・クライアント・インターフェースの javax.xml.ws.Dispatch は、XML メッセージング指向クライアントであり、 XML 構成体を使用して XML レベルで作業することを好む上級 XML 開発者向けです。 ディスパッチ・クライアントを作成するには、 ディスパッチ・クライアント API、サポートされるオブジェクト・タイプ、および関連した Web サービス記述言語 (WSDL) ファイルに関するメッセージ表記の知識に習熟している必要があります。
ディスパッチ API は、PAYLOAD モードまたは MESSAGE モードのいずれかでデータを送信できます。 PAYLOAD モードを使用する場合、ディスパッチ・クライアントは <soap:Body> の内容の提供のみを担当し、入力ペイロードは JAX-WS の <soap:Envelope> エレメントに含まれます。 MESSAGE モードを使用する場合、 ディスパッチ・クライアントは SOAP エンベロープ全体の提供を担当します。
String endpointUrl = ...; QName serviceName = new QName("http://com/ibm/was/wssample/echo/", "EchoService"); QName portName = new QName("http://com/ibm/was/wssample/echo/", "EchoServicePort"); /** Create a service and add at least one port to it. **/ Service service = Service.create(serviceName); service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl); /** Create a Dispatch instance from a service.**/ Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); /** Create SOAPMessage request. **/ // compose a request message MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); // Create a message. This example works with the SOAPPART. SOAPMessage request = mf.createMessage(); SOAPPart part = request.getSOAPPart(); // Obtain the SOAPEnvelope and header and body elements. SOAPEnvelope env = part.getEnvelope(); SOAPHeader header = env.getHeader(); SOAPBody body = env.getBody(); // Construct the message payload. SOAPElement operation = body.addChildElement("invoke", "ns1", "http://com/ibm/was/wssample/echo/"); SOAPElement value = operation.addChildElement("arg0"); value.addTextNode("ping"); request.saveChanges(); /** Invoke the service endpoint. **/ SOAPMessage response = dispatch.invoke(request); /** Process the response. **/