Package org.apache.axis2.jaxws.client.soapaction.server

Source Code of org.apache.axis2.jaxws.client.soapaction.server.SOAPActionTestsMessageReceiver

/*
* 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.client.soapaction.server;

import java.util.Iterator;

import javax.xml.namespace.QName;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMText;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
import org.apache.axis2.jaxws.TestLogger;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.engine.AxisEngine;
import org.apache.axis2.engine.MessageReceiver;
import org.apache.axis2.util.MessageContextBuilder;

/**
* This MessageReceiver is used for a series of tests relating to the
* SOAP action.  This is mostly for testing that the correct operation
* was resolved based on the SOAP action that was sent by the client. 
*/
public class SOAPActionTestsMessageReceiver implements MessageReceiver {
   
    public void receive(MessageContext request) throws AxisFault {
        TestLogger.logger.debug("[server] SOAPActionTestsMessageReceiver: new request received");
       
        SOAPEnvelope env = request.getEnvelope();
        TestLogger.logger.debug("[server] request message [" + env + "]");
       
        // Get the first child element
        Iterator itr = env.getBody().getChildElements();
        OMElement child = (OMElement) itr.next();

        // Create the envelope for the response
        SOAPFactory sf = OMAbstractFactory.getSOAP11Factory();
        SOAPEnvelope responseEnv = sf.createSOAPEnvelope();
        sf.createSOAPBody(responseEnv);
        OMElement responseBodyContent = null;
       
        // Check to see which operation was invoked and then validate the contents
        // of the request (resolved AxisOperation and the soap action) to see if they are correct.
        String name = child.getLocalName();
        if (name.equals("getPrice")) {
            float status = 0;
            if (checkOperation("getPrice", request) &&
                checkSOAPAction("", request)) {
                TestLogger.logger.debug("[server] all checks passed");
                status = 1;
            }
            else {
                TestLogger.logger.debug("[server] some checks failed");
            }
           
            responseBodyContent = sf.createOMElement(new QName("http://jaxws.axis2.apache.org/client/soapaction", "getPriceWithActionResponse"), responseEnv.getBody());
            OMElement elem = sf.createOMElement(new QName("", "price"), responseBodyContent);
            OMText text = sf.createOMText(Float.toString(status));
            elem.addChild(text);
        }
        else if (name.equals("getPriceWithAction")) {
            float status = 0;
            if (checkOperation("getPriceWithAction", request) &&
                checkSOAPAction("http://jaxws.axis2.apache.org/client/soapaction/getPrice", request)) {
                TestLogger.logger.debug("[server] all checks passed");
                status = 1;
            }
            else {
                TestLogger.logger.debug("[server] some checks failed");
            }
           
            responseBodyContent = sf.createOMElement(new QName("http://jaxws.axis2.apache.org/client/soapaction", "getPriceWithActionResponse"), responseEnv.getBody());
            OMElement elem = sf.createOMElement(new QName("", "price"), responseBodyContent);
            OMText text = sf.createOMText(Float.toString(status));
            elem.addChild(text);
        }
       
        /*
        else if (name.equals("item")) {
            if (checkOperation("getInventory", request) &&
                checkSOAPAction("", request)) {
                status = STATUS_PASS;
            }
        }
        else if (name.equals("itemWithAction")) {
            if (checkOperation("getInventoryWithAction", request) &&
                checkSOAPAction("http://jaxws.axis2.apache.org/client/soapaction/getInventory", request)) {
                status = STATUS_PASS;
            }
        }
        */
       
        // Fill in the contents of the response and send it back
        MessageContext response = MessageContextBuilder.createOutMessageContext(request);
        responseEnv.getBody().addChild(responseBodyContent);
        response.setEnvelope(responseEnv);

        TestLogger.logger.debug("[server] response message [" + responseEnv.toString() + "]");
       
        response.getOperationContext().addMessageContext(response);
        AxisEngine engine = new AxisEngine(response.getConfigurationContext());
        engine.send(response);   
    }
   
    /*
     * Verify that the AxisOperation on the MessageContext is the
     * one that we were expecting based on the request.
     */
    private boolean checkOperation(String expectedOperationName, MessageContext mc) {
        AxisOperation op = mc.getAxisOperation();
        TestLogger.logger.debug("[server] checking expected operation [" + expectedOperationName +
                "] against resolved operation [" + op.getName() + "]");
        if (op.getName().getLocalPart().equals(expectedOperationName)) {
            TestLogger.logger.debug("[server] operation name is correct");
            return true;
        }
        else {
            TestLogger.logger.debug("[server] operation name is incorrect");
            return false;
        }
    }
   
    /*
     * Verify that the SOAPAction present on the MessageContext is
     * the one that we were expecting based on the request.
     */
    private boolean checkSOAPAction(String expectedAction, MessageContext mc) {
       String action = mc.getSoapAction();
        TestLogger.logger.debug("[server] checking expected action [" + expectedAction +
                "] against received action [" + action + "]");
       if (action != null && action.equals(expectedAction)) {
           TestLogger.logger.debug("[server] soap action is correct");
           return true;
       }          
       else {
           TestLogger.logger.debug("[server] soap action is incorrect");
           return false;
       }  
    }
}
TOP

Related Classes of org.apache.axis2.jaxws.client.soapaction.server.SOAPActionTestsMessageReceiver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.