blob: 5c26123d58b626d91fdc5239417dcdfb9a551d23 [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.core.MessageContext;
import org.apache.axis2.jaxws.handler.factory.HandlerPostInvokerFactory;
import org.apache.axis2.jaxws.handler.factory.HandlerPreInvokerFactory;
import org.apache.axis2.jaxws.message.Block;
import org.apache.axis2.jaxws.message.Message;
import org.apache.axis2.jaxws.message.Protocol;
import org.apache.axis2.jaxws.message.factory.MessageFactory;
import org.apache.axis2.jaxws.message.factory.XMLStringBlockFactory;
import org.apache.axis2.jaxws.registry.FactoryRegistry;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import java.util.ArrayList;
import java.util.Set;
/**
* HandlerPrePostInvokerTests verifies that the mechanisms for finding the implementation classes to
* call before and after handler.handleMessage work, and that the calls are actually made. Simple as that.
*/
public class HandlerPrePostInvokerTests extends TestCase {
private MessageContext mc = null;
private boolean preInvokerCalled = false;
private boolean postInvokerCalled = false;
private static final String soap11env = "http://schemas.xmlsoap.org/soap/envelope/";
public static final String SOAP11_ENVELOPE =
"<?xml version='1.0' encoding='utf-8'?>" +
"<soapenv:Envelope xmlns:soapenv=\"" + soap11env + "\">" +
"<soapenv:Header />" +
"<soapenv:Body>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
@Override
protected void setUp() throws Exception {
// Create a SOAP 1.1 Message and MessageContext
// I just grabbed this code from the JAXWS MessageTests
MessageFactory mf = (MessageFactory) FactoryRegistry.getFactory(MessageFactory.class);
Message m = mf.create(Protocol.soap11);
XMLStringBlockFactory f =
(XMLStringBlockFactory) FactoryRegistry.getFactory(XMLStringBlockFactory.class);
Block block = f.createFrom(SOAP11_ENVELOPE, null, null);
m.setBodyBlock(block);
mc = new MessageContext();
mc.setMessage(m);
mc.setMEPContext(new MEPContext(mc));
}
/**
* make sure the defaults are as expected
*
*/
public void testFactoryRegistry() {
HandlerPreInvokerFactory preFact = (HandlerPreInvokerFactory)FactoryRegistry.getFactory(HandlerPreInvokerFactory.class);
HandlerPostInvokerFactory postFact = (HandlerPostInvokerFactory)FactoryRegistry.getFactory(HandlerPostInvokerFactory.class);
HandlerPreInvoker preInvoker = preFact.createHandlerPreInvoker();
HandlerPostInvoker postInvoker = postFact.createHandlerPostInvoker();
assertTrue("preInvoker should be instanceof " + org.apache.axis2.jaxws.handler.impl.HandlerPreInvokerImpl.class.getCanonicalName(), preInvoker instanceof org.apache.axis2.jaxws.handler.impl.HandlerPreInvokerImpl);
assertTrue("postInvoker should be instanceof " + org.apache.axis2.jaxws.handler.impl.HandlerPostInvokerImpl.class.getCanonicalName(), postInvoker instanceof org.apache.axis2.jaxws.handler.impl.HandlerPostInvokerImpl);
}
/**
* make sure the registered factories are used, and the calls are made in the places we expect
*
*/
public void testFactoryPrePost() {
FactoryRegistry.setFactory(HandlerPreInvokerFactory.class, new HandlerPreInvokerFactoryImpl());
FactoryRegistry.setFactory(HandlerPostInvokerFactory.class, new HandlerPostInvokerFactoryImpl());
ArrayList<Handler> handlers = new ArrayList<Handler>();
handlers.add(new SOAPHandler1());
HandlerChainProcessor processor =
new HandlerChainProcessor(handlers, Protocol.soap11);
boolean success = true;
try {
// server-side incoming request
success = processor.processChain(mc.getMEPContext(),
HandlerChainProcessor.Direction.IN,
HandlerChainProcessor.MEP.REQUEST,
true);
} catch (Exception e) {
assertNull(e); // should not get exception
}
assertTrue("processChain should have succeeded", success);
assertTrue("preInvoker should have been called", preInvokerCalled);
assertTrue("postInvoker should have been called", postInvokerCalled);
}
/*****************************************
* Classes needed for junit testcase *
*****************************************/
private class SOAPHandler1 implements SOAPHandler<SOAPMessageContext> {
public Set getHeaders() {
return null;
}
public void close(javax.xml.ws.handler.MessageContext messagecontext) {
}
public boolean handleFault(SOAPMessageContext messagecontext) {
return true;
}
public boolean handleMessage(SOAPMessageContext messagecontext) {
return true;
}
}
private class HandlerPreInvokerFactoryImpl implements HandlerPreInvokerFactory {
public HandlerPreInvoker createHandlerPreInvoker() {
return new HandlerPreInvokerImpl();
}
}
private class HandlerPostInvokerFactoryImpl implements HandlerPostInvokerFactory {
public HandlerPostInvoker createHandlerPostInvoker() {
return new HandlerPostInvokerImpl();
}
}
private class HandlerPreInvokerImpl implements HandlerPreInvoker {
public void preInvoke(javax.xml.ws.handler.MessageContext mc) {
preInvokerCalled = true;
}
}
private class HandlerPostInvokerImpl implements HandlerPostInvoker {
public void postInvoke(javax.xml.ws.handler.MessageContext mc) {
postInvokerCalled = true;
}
}
}