/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.example.cxf.provider; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPBodyElement; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPMessage; import javax.xml.ws.BindingProvider; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.soap.SOAPBinding; /** * A simple client that uses the JAX-WS Dispatch API to call * a service endpoint exposed in a servlet container. */ public final class Client { // The endpoint address of the service String endpointAddress; public Client(String endpointAddress) { this.endpointAddress = endpointAddress; } public String invoke() throws Exception { // Service Qname as defined in the WSDL. QName serviceName = new QName("http://apache.org/hello_world_soap_http", "SOAPService"); // Port QName as defined in the WSDL. QName portName = new QName("http://apache.org/hello_world_soap_http", "SoapOverHttpRouter"); // Create a dynamic Service instance Service service = Service.create(serviceName); // Add a port to the Service service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); // Create a dispatch instance Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); // Use Dispatch as BindingProvider BindingProvider bp = dispatch; MessageFactory factory = ((SOAPBinding)bp.getBinding()).getMessageFactory(); // Create SOAPMessage Request SOAPMessage request = factory.createMessage(); // Request Body SOAPBody body = request.getSOAPBody(); // Compose the soap:Body payload QName payloadName = new QName("http://apache.org/hello_world_soap_http/types", "greetMe", "ns1"); SOAPBodyElement payload = body.addBodyElement(payloadName); SOAPElement message = payload.addChildElement("requestType"); message.addTextNode("Hello Camel!!"); System.out.println("Send out the request: Hello Camel!!"); // Invoke the endpoint synchronously // Invoke endpoint operation and read response SOAPMessage reply = dispatch.invoke(request); // process the reply body = reply.getSOAPBody(); QName responseName = new QName("http://apache.org/hello_world_soap_http/types", "greetMeResponse"); SOAPElement bodyElement = (SOAPElement)body.getChildElements(responseName).next(); String responseMessageText = bodyElement.getTextContent(); System.out.println("Get the response: " + responseMessageText); return responseMessageText; } public static void main(String[] args) throws Exception { Client client = new Client("http://localhost:9000/GreeterContext/SOAPMessageService"); client.invoke(); } }