| /** |
| * 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.component.cxf; |
| |
| import java.net.URL; |
| import java.util.List; |
| |
| import javax.xml.namespace.QName; |
| import javax.xml.transform.Source; |
| import javax.xml.transform.dom.DOMSource; |
| import javax.xml.ws.BindingProvider; |
| |
| import org.w3c.dom.Element; |
| |
| import org.apache.camel.Exchange; |
| import org.apache.camel.Processor; |
| import org.apache.camel.builder.RouteBuilder; |
| import org.apache.camel.converter.jaxp.XmlConverter; |
| import org.apache.camel.pizza.Pizza; |
| import org.apache.camel.pizza.PizzaService; |
| import org.apache.camel.pizza.types.CallerIDHeaderType; |
| import org.apache.camel.pizza.types.OrderPizzaResponseType; |
| import org.apache.camel.pizza.types.OrderPizzaType; |
| import org.apache.camel.pizza.types.ToppingsListType; |
| import org.apache.cxf.binding.soap.SoapHeader; |
| import org.apache.cxf.headers.Header; |
| import org.junit.Test; |
| |
| public class CxfPayLoadSoapHeaderTest extends CxfPayLoadSoapHeaderTestAbstract { |
| |
| private final QName serviceName = new QName("http://camel.apache.org/pizza", "PizzaService"); |
| |
| @Override |
| protected RouteBuilder createRouteBuilder() { |
| return new RouteBuilder() { |
| public void configure() { |
| // START SNIPPET: payload |
| from(getRouterEndpointURI()).process(new Processor() { |
| @SuppressWarnings("unchecked") |
| public void process(Exchange exchange) throws Exception { |
| CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class); |
| List<Source> elements = payload.getBodySources(); |
| assertNotNull("We should get the elements here", elements); |
| assertEquals("Get the wrong elements size", 1, elements.size()); |
| |
| Element el = new XmlConverter().toDOMElement(elements.get(0)); |
| elements.set(0, new DOMSource(el)); |
| assertEquals("Get the wrong namespace URI", "http://camel.apache.org/pizza/types", |
| el.getNamespaceURI()); |
| |
| List<SoapHeader> headers = payload.getHeaders(); |
| assertNotNull("We should get the headers here", headers); |
| assertEquals("Get the wrong headers size", headers.size(), 1); |
| assertEquals("Get the wrong namespace URI", |
| ((Element)(headers.get(0).getObject())).getNamespaceURI(), |
| "http://camel.apache.org/pizza/types"); |
| // alternatively you can also get the SOAP header via the camel header: |
| headers = exchange.getIn().getHeader(Header.HEADER_LIST, List.class); |
| assertNotNull("We should get the headers here", headers); |
| assertEquals("Get the wrong headers size", headers.size(), 1); |
| assertEquals("Get the wrong namespace URI", |
| ((Element)(headers.get(0).getObject())).getNamespaceURI(), |
| "http://camel.apache.org/pizza/types"); |
| |
| } |
| |
| }) |
| .to(getServiceEndpointURI()); |
| // END SNIPPET: payload |
| } |
| }; |
| } |
| |
| |
| @Test |
| public void testPizzaService() { |
| Pizza port = getPort(); |
| |
| OrderPizzaType req = new OrderPizzaType(); |
| ToppingsListType t = new ToppingsListType(); |
| t.getTopping().add("test"); |
| req.setToppings(t); |
| |
| CallerIDHeaderType header = new CallerIDHeaderType(); |
| header.setName("Willem"); |
| header.setPhoneNumber("108"); |
| |
| OrderPizzaResponseType res = port.orderPizza(req, header); |
| |
| assertEquals(208, res.getMinutesUntilReady()); |
| } |
| |
| private Pizza getPort() { |
| URL wsdl = getClass().getResource("/pizza_service.wsdl"); |
| assertNotNull("WSDL is null", wsdl); |
| |
| PizzaService service = new PizzaService(wsdl, serviceName); |
| assertNotNull("Service is null ", service); |
| |
| Pizza pizza = service.getPizzaPort(); |
| ((BindingProvider)pizza).getRequestContext() |
| .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, |
| "http://localhost:" + port1 + "/" + getClass().getSimpleName() |
| + "/pizza_service/services/PizzaService"); |
| return pizza; |
| } |
| |
| |
| } |