blob: d83929785cf30152c2bfb8f687ad06b6e1d39aaf [file] [log] [blame]
/*
* 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.axis2.jaxws.handler;
import junit.framework.TestCase;
import org.apache.axis2.jaxws.description.DescriptionFactory;
import org.apache.axis2.jaxws.description.EndpointDescription;
import org.apache.axis2.jaxws.description.ServiceDescription;
import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
import org.apache.axis2.jaxws.description.impl.DescriptionUtils;
import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType;
import javax.jws.WebService;
import javax.xml.namespace.QName;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.PortInfo;
import javax.xml.ws.soap.SOAPBinding;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
/**
* Verify the HandlerResolverImpl functionality.
*/
public class HandlerResolverTest extends TestCase {
private String namespaceURI = "http://www.apache.org/test/namespace";
private String svcLocalPart = "DummyService";
private String portLocalPart = "DummyPort";
private String portWrongLocalPart = "WrongPort";
/**
* Test that setting the handler chain type on a sparse composite, but not
* specifying that composite during construction of the HandlerResolver (i.e. no
* Delegate key specified) results in no hanlders returned from this resolver.
*/
public void testHandlerResolverNoKey() {
QName serviceQName = new QName(namespaceURI, svcLocalPart);
// Create a composite with a JAXB Handler Config
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite();
HandlerChainsType handlerChainsType = getHandlerChainsType();
sparseComposite.setHandlerChainsType(handlerChainsType);
Object serviceDelegateKey = "CompositeKey";
ServiceDescription serviceDesc =
DescriptionFactory.createServiceDescription(null, serviceQName, HandlerResolverTestService.class, sparseComposite, serviceDelegateKey);
HandlerResolver resolver = new HandlerResolverImpl(serviceDesc);
assertNotNull(resolver);
PortInfo pi = new DummyPortInfo();
List<Handler> list = resolver.getHandlerChain(pi);
assertEquals(0, list.size());
}
/**
* The sparse composite has handler config information for the key that the HandlerResolver
* is created with, so that handler resolver contains those handlers. However, the
* portInfo specified on the getHandlerChain does NOT match the QName in the config file
* so no handlers should be returned.
*/
public void testHandlerResolverInvalidPortInfo() {
QName serviceQName = new QName(namespaceURI, svcLocalPart);
QName portQName = new QName(namespaceURI, portWrongLocalPart);
// Create a composite with a JAXB Handler Config
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite();
HandlerChainsType handlerChainsType = getHandlerChainsType();
sparseComposite.setHandlerChainsType(handlerChainsType);
Object serviceDelegateKey = "CompositeKey";
// The getHandlerChain will do handler lifecycle management as well, so there needs to be
// and EnpdointDescription (representing the Port) under the ServiceDescription
ServiceDescription serviceDesc =
DescriptionFactory.createServiceDescription(null, serviceQName, HandlerResolverTestService.class, sparseComposite, serviceDelegateKey);
EndpointDescription endpointDesc =
DescriptionFactory.updateEndpoint(serviceDesc, HandlerResolverTestSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT);
HandlerResolver resolver = new HandlerResolverImpl(serviceDesc, serviceDelegateKey);
assertNotNull(resolver);
PortInfo pi = new DummyPortInfo();
List<Handler> list = resolver.getHandlerChain(pi);
assertEquals(0, list.size());
}
/**
* The sparse composite has handler config information for the key that the HandlerResolver
* is created with, so that handler resolver contains those handlers.
*/
public void testHandlerResolverValidPortInfo() {
QName serviceQName = new QName(namespaceURI, svcLocalPart);
QName portQName = new QName(namespaceURI, portLocalPart);
// Create a composite with a JAXB Handler Config
DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite();
HandlerChainsType handlerChainsType = getHandlerChainsType();
sparseComposite.setHandlerChainsType(handlerChainsType);
Object serviceDelegateKey = "CompositeKey";
// The getHandlerChain will do handler lifecycle management as well, so there needs to be
// and EnpdointDescription (representing the Port) under the ServiceDescription
ServiceDescription serviceDesc =
DescriptionFactory.createServiceDescription(null, serviceQName, HandlerResolverTestService.class, sparseComposite, serviceDelegateKey);
EndpointDescription endpointDesc =
DescriptionFactory.updateEndpoint(serviceDesc, HandlerResolverTestSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT);
HandlerResolver resolver = new HandlerResolverImpl(serviceDesc, serviceDelegateKey);
assertNotNull(resolver);
PortInfo pi = new DummyPortInfo();
List<Handler> list = resolver.getHandlerChain(pi);
assertEquals(2, list.size());
}
private HandlerChainsType getHandlerChainsType() {
InputStream is = getXMLFileStream();
assertNotNull(is);
HandlerChainsType returnHCT = DescriptionUtils.loadHandlerChains(is, this.getClass().getClassLoader());
assertNotNull(returnHCT);
return returnHCT;
}
private InputStream getXMLFileStream() {
InputStream is = null;
String configLoc = null;
try {
String sep = "/";
configLoc = sep + "test-resources" + sep + "configuration" + sep + "handlers" + sep + "handler.xml";
String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath();
is = new File(baseDir + configLoc).toURL().openStream();
}
catch(Exception e) {
e.printStackTrace();
}
return is;
}
public class DummyPortInfo implements PortInfo {
public String getBindingID() {
return SOAPBinding.SOAP11HTTP_BINDING;
}
public QName getPortName() {
return new QName("http://www.apache.org/test/namespace", "DummyPort");
}
public QName getServiceName() {
return new QName("http://www.apache.org/test/namespace", "DummyService");
}
}
}
@WebServiceClient
class HandlerResolverTestService extends javax.xml.ws.Service {
protected HandlerResolverTestService(URL wsdlDocumentLocation, QName serviceName) {
super(wsdlDocumentLocation, serviceName);
}
}
@WebService
interface HandlerResolverTestSEI {
public String echo(String toEcho);
}