blob: 84fde3da502867a4a7aa97d374c02c271feaa9d0 [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.client.soapaction.server;
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.context.MessageContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.engine.AxisEngine;
import org.apache.axis2.engine.MessageReceiver;
import org.apache.axis2.jaxws.TestLogger;
import org.apache.axis2.util.MessageContextBuilder;
import javax.xml.namespace.QName;
import java.util.Iterator;
/**
* 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.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;
}
}
}