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.jaxws.handler;
019:
020: import java.util.Arrays;
021: import java.util.List;
022: import java.util.Map;
023:
024: import javax.xml.ws.WebServiceException;
025: import javax.xml.ws.handler.Handler;
026: import javax.xml.ws.handler.LogicalHandler;
027: import javax.xml.ws.handler.MessageContext;
028:
029: import org.apache.cxf.Bus;
030: import org.apache.cxf.jaxws.javaee.FullyQualifiedClassType;
031: import org.apache.cxf.jaxws.javaee.HandlerChainType;
032: import org.apache.cxf.jaxws.javaee.ParamValueType;
033: import org.apache.cxf.jaxws.javaee.PortComponentHandlerType;
034: import org.easymock.classextension.EasyMock;
035: import org.junit.Assert;
036: import org.junit.Test;
037:
038: public class HandlerChainBuilderTest extends Assert {
039:
040: Handler[] allHandlers = {
041: EasyMock.createMock(LogicalHandler.class),
042: EasyMock.createMock(Handler.class),
043: EasyMock.createMock(Handler.class),
044: EasyMock.createMock(LogicalHandler.class) };
045: Handler[] logicalHandlers = { allHandlers[0], allHandlers[3] };
046: Handler[] protocolHandlers = { allHandlers[1], allHandlers[2] };
047:
048: HandlerChainBuilder builder = new HandlerChainBuilder(EasyMock
049: .createNiceMock(Bus.class));
050:
051: @Test
052: public void testChainSorting() {
053: List<Handler> sortedHandlerChain = builder.sortHandlers(Arrays
054: .asList(allHandlers));
055: assertSame(logicalHandlers[0], sortedHandlerChain.get(0));
056: assertSame(logicalHandlers[1], sortedHandlerChain.get(1));
057: assertSame(protocolHandlers[0], sortedHandlerChain.get(2));
058: assertSame(protocolHandlers[1], sortedHandlerChain.get(3));
059: }
060:
061: @Test
062: public void testBuildHandlerChainFromConfiguration() {
063:
064: HandlerChainType hc = createHandlerChainType();
065: List<Handler> chain = builder
066: .buildHandlerChainFromConfiguration(hc);
067:
068: assertNotNull(chain);
069: assertEquals(4, chain.size());
070: assertEquals(TestLogicalHandler.class, chain.get(0).getClass());
071: assertEquals(TestLogicalHandler.class, chain.get(1).getClass());
072: assertEquals(TestProtocolHandler.class, chain.get(2).getClass());
073: assertEquals(TestProtocolHandler.class, chain.get(3).getClass());
074:
075: TestLogicalHandler tlh = (TestLogicalHandler) chain.get(0);
076: assertTrue(!tlh.initCalled);
077: assertNull(tlh.config);
078: }
079:
080: @Test
081: public void testBuilderCallsInit() {
082: HandlerChainType hc = createHandlerChainType();
083: hc.getHandler().remove(3);
084: hc.getHandler().remove(2);
085: hc.getHandler().remove(1);
086:
087: PortComponentHandlerType h = hc.getHandler().get(0);
088: List<ParamValueType> params = h.getInitParam();
089:
090: ParamValueType p = new ParamValueType();
091: org.apache.cxf.jaxws.javaee.String pName = new org.apache.cxf.jaxws.javaee.String();
092: pName.setValue("foo");
093: p.setParamName(pName);
094: org.apache.cxf.jaxws.javaee.XsdStringType pValue = new org.apache.cxf.jaxws.javaee.XsdStringType();
095: pValue.setValue("1");
096: p.setParamValue(pValue);
097: params.add(p);
098:
099: p = new ParamValueType();
100: pName = new org.apache.cxf.jaxws.javaee.String();
101: pName.setValue("bar");
102: p.setParamName(pName);
103: pValue = new org.apache.cxf.jaxws.javaee.XsdStringType();
104: pValue.setValue("2");
105: p.setParamValue(pValue);
106: params.add(p);
107:
108: List<Handler> chain = builder
109: .buildHandlerChainFromConfiguration(hc);
110: assertEquals(1, chain.size());
111: TestLogicalHandler tlh = (TestLogicalHandler) chain.get(0);
112:
113: assertTrue(tlh.initCalled);
114: Map cfg = tlh.config;
115: assertNotNull(tlh.config);
116:
117: assertEquals(2, cfg.keySet().size());
118: assertEquals("1", cfg.get("foo"));
119: assertEquals("2", cfg.get("bar"));
120: }
121:
122: @Test
123: public void testBuilderCallsInitWithNoInitParamValues() {
124: HandlerChainType hc = createHandlerChainType();
125: hc.getHandler().remove(3);
126: hc.getHandler().remove(2);
127: hc.getHandler().remove(1);
128:
129: PortComponentHandlerType h = hc.getHandler().get(0);
130: List<ParamValueType> params = h.getInitParam();
131:
132: ParamValueType p = new ParamValueType();
133: org.apache.cxf.jaxws.javaee.String pName = new org.apache.cxf.jaxws.javaee.String();
134: pName.setValue("foo");
135: p.setParamName(pName);
136: params.add(p);
137:
138: List<Handler> chain = builder
139: .buildHandlerChainFromConfiguration(hc);
140: assertEquals(1, chain.size());
141: TestLogicalHandler tlh = (TestLogicalHandler) chain.get(0);
142:
143: assertTrue(tlh.initCalled);
144: Map cfg = tlh.config;
145: assertNotNull(tlh.config);
146: assertEquals(1, cfg.keySet().size());
147: }
148:
149: @Test
150: public void testBuilderCannotLoadHandlerClass() {
151: HandlerChainType hc = createHandlerChainType();
152: hc.getHandler().remove(3);
153: hc.getHandler().remove(2);
154: hc.getHandler().remove(1);
155: FullyQualifiedClassType type = new FullyQualifiedClassType();
156: type.setValue("no.such.class");
157: hc.getHandler().get(0).setHandlerClass(type);
158:
159: try {
160: builder.buildHandlerChainFromConfiguration(hc);
161: fail("did not get expected exception");
162: } catch (WebServiceException ex) {
163: // ex.printStackTrace();
164: assertNotNull(ex.getCause());
165: assertEquals(ClassNotFoundException.class, ex.getCause()
166: .getClass());
167: }
168: }
169:
170: private HandlerChainType createHandlerChainType() {
171: HandlerChainType hc = new HandlerChainType();
172: List<PortComponentHandlerType> handlers = hc.getHandler();
173:
174: PortComponentHandlerType h = new PortComponentHandlerType();
175: org.apache.cxf.jaxws.javaee.String name = new org.apache.cxf.jaxws.javaee.String();
176: name.setValue("lh1");
177: h.setHandlerName(name);
178: FullyQualifiedClassType type = new FullyQualifiedClassType();
179: type.setValue(TestLogicalHandler.class.getName());
180: h.setHandlerClass(type);
181: handlers.add(h);
182:
183: h = new PortComponentHandlerType();
184: name = new org.apache.cxf.jaxws.javaee.String();
185: name.setValue("ph1");
186: h.setHandlerName(name);
187: type = new FullyQualifiedClassType();
188: type.setValue(TestProtocolHandler.class.getName());
189: h.setHandlerClass(type);
190: handlers.add(h);
191:
192: h = new PortComponentHandlerType();
193: name = new org.apache.cxf.jaxws.javaee.String();
194: name.setValue("ph2");
195: h.setHandlerName(name);
196: type = new FullyQualifiedClassType();
197: type.setValue(TestProtocolHandler.class.getName());
198: h.setHandlerClass(type);
199: handlers.add(h);
200:
201: h = new PortComponentHandlerType();
202: name = new org.apache.cxf.jaxws.javaee.String();
203: name.setValue("lh2");
204: h.setHandlerName(name);
205: type = new FullyQualifiedClassType();
206: type.setValue(TestLogicalHandler.class.getName());
207: h.setHandlerClass(type);
208: handlers.add(h);
209:
210: return hc;
211: }
212:
213: public static class TestLogicalHandler implements LogicalHandler {
214:
215: Map config;
216: boolean initCalled;
217:
218: public void close(MessageContext arg0) {
219: }
220:
221: public boolean handleFault(MessageContext arg0) {
222: return false;
223: }
224:
225: public boolean handleMessage(MessageContext arg0) {
226: return false;
227: }
228:
229: public final void init(final Map map) {
230: config = map;
231: initCalled = true;
232: }
233: }
234:
235: public static class TestProtocolHandler implements Handler {
236:
237: public void close(MessageContext arg0) {
238: }
239:
240: public boolean handleFault(MessageContext arg0) {
241: return false;
242: }
243:
244: public boolean handleMessage(MessageContext arg0) {
245: return false;
246: }
247: }
248: }
|