001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */package org.apache.cxf.systest.handlers;
019:
020: import java.net.URL;
021: import java.util.List;
022:
023: import javax.xml.bind.JAXBContext;
024: import javax.xml.bind.JAXBElement;
025: import javax.xml.namespace.QName;
026:
027: import javax.xml.soap.SOAPMessage;
028: import javax.xml.ws.BindingProvider;
029: import javax.xml.ws.Dispatch;
030: import javax.xml.ws.Service;
031: import javax.xml.ws.handler.Handler;
032: import javax.xml.ws.handler.MessageContext;
033: import javax.xml.ws.handler.soap.SOAPMessageContext;
034:
035: import org.apache.cxf.Bus;
036: import org.apache.cxf.BusFactory;
037: import org.apache.cxf.resource.ResourceManager;
038: import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
039: import org.apache.handlers.AddNumbers;
040: import org.apache.handlers.AddNumbersService;
041: import org.apache.handlers.types.AddNumbersResponse;
042: import org.apache.handlers.types.ObjectFactory;
043: import org.junit.BeforeClass;
044: import org.junit.Test;
045:
046: public class HandlerInvocationUsingAddNumbersTest extends
047: AbstractBusClientServerTestBase {
048:
049: static QName serviceName = new QName("http://apache.org/handlers",
050: "AddNumbersService");
051: static QName portName = new QName("http://apache.org/handlers",
052: "AddNumbersPort");
053:
054: @BeforeClass
055: public static void startServers() throws Exception {
056: assertTrue("server did not launch correctly",
057: launchServer(HandlerServer.class));
058: }
059:
060: @Test
061: public void testAddHandlerProgrammaticallyClientSide()
062: throws Exception {
063: URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
064:
065: AddNumbersService service = new AddNumbersService(wsdl,
066: serviceName);
067: AddNumbers port = (AddNumbers) service.getPort(portName,
068: AddNumbers.class);
069:
070: SmallNumberHandler sh = new SmallNumberHandler();
071: addHandlersProgrammatically((BindingProvider) port, sh);
072:
073: int result = port.addNumbers(10, 20);
074: assertEquals(200, result);
075: int result1 = port.addNumbers(5, 6);
076: assertEquals(11, result1);
077: }
078:
079: @Test
080: public void testAddHandlerByAnnotationClientSide() throws Exception {
081: URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
082:
083: AddNumbersServiceWithAnnotation service = new AddNumbersServiceWithAnnotation(
084: wsdl, serviceName);
085: AddNumbers port = (AddNumbers) service.getPort(portName,
086: AddNumbers.class);
087:
088: int result = port.addNumbers(10, 20);
089: assertEquals(200, result);
090: int result1 = port.addNumbers(5, 6);
091: assertEquals(11, result1);
092: }
093:
094: @Test
095: public void testInvokeFromDispatchWithJAXBPayload()
096: throws Exception {
097: URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
098: assertNotNull(wsdl);
099:
100: AddNumbersService service = new AddNumbersService(wsdl,
101: serviceName);
102: assertNotNull(service);
103:
104: JAXBContext jc = JAXBContext
105: .newInstance("org.apache.handlers.types");
106: Dispatch<Object> disp = service.createDispatch(portName, jc,
107: Service.Mode.PAYLOAD);
108:
109: SmallNumberHandler sh = new SmallNumberHandler();
110: TestSOAPHandler soapHandler = new TestSOAPHandler<SOAPMessageContext>(
111: false) {
112: public boolean handleMessage(SOAPMessageContext ctx) {
113: super .handleMessage(ctx);
114: Boolean outbound = (Boolean) ctx
115: .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
116: if (outbound) {
117: try {
118: SOAPMessage msg = ctx.getMessage();
119: //System.out.println("aaaaaaaaaaaa");
120: //msg.writeTo(System.out);
121: assertNotNull(msg);
122: } catch (Exception e) {
123: e.printStackTrace();
124: fail(e.toString());
125: }
126: }
127: return true;
128: }
129: };
130: addHandlersProgrammatically(disp, sh, soapHandler);
131:
132: org.apache.handlers.types.AddNumbers req = new org.apache.handlers.types.AddNumbers();
133: req.setArg0(10);
134: req.setArg1(20);
135: ObjectFactory factory = new ObjectFactory();
136: JAXBElement e = factory.createAddNumbers(req);
137:
138: JAXBElement response = (JAXBElement) disp.invoke(e);
139: assertNotNull(response);
140: AddNumbersResponse value = (AddNumbersResponse) response
141: .getValue();
142: assertEquals(200, value.getReturn());
143: }
144:
145: @Test
146: public void testHandlerPostConstruct() throws Exception {
147: URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
148:
149: AddNumbersServiceWithAnnotation service = new AddNumbersServiceWithAnnotation(
150: wsdl, serviceName);
151: AddNumbers port = (AddNumbers) service.getPort(portName,
152: AddNumbers.class);
153:
154: List<Handler> handlerChain = ((BindingProvider) port)
155: .getBinding().getHandlerChain();
156: SmallNumberHandler h = (SmallNumberHandler) handlerChain.get(0);
157:
158: assertTrue(h.isPostConstructInvoked());
159: }
160:
161: @Test
162: public void testHandlerInjectingResource() throws Exception {
163: //When CXF is deployed in a servlet container, ServletContextResourceResolver is used to resolve
164: //Servlet context resources.
165: Bus bus = BusFactory.getDefaultBus();
166: ResourceManager resourceManager = bus
167: .getExtension(ResourceManager.class);
168: assertNotNull(resourceManager);
169: resourceManager.addResourceResolver(new TestResourceResolver());
170:
171: URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
172:
173: AddNumbersServiceWithAnnotation service = new AddNumbersServiceWithAnnotation(
174: wsdl, serviceName);
175: AddNumbers port = (AddNumbers) service.getPort(portName,
176: AddNumbers.class);
177:
178: List<Handler> handlerChain = ((BindingProvider) port)
179: .getBinding().getHandlerChain();
180: SmallNumberHandler h = (SmallNumberHandler) handlerChain.get(0);
181:
182: assertEquals("injectedValue", h.getInjectedString());
183: }
184:
185: private void addHandlersProgrammatically(BindingProvider bp,
186: Handler... handlers) {
187: List<Handler> handlerChain = bp.getBinding().getHandlerChain();
188: assertNotNull(handlerChain);
189: for (Handler h : handlers) {
190: handlerChain.add(h);
191: }
192: }
193:
194: }
|