/* * 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.description; import java.io.InputStream; import java.util.Enumeration; import javax.xml.namespace.QName; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.axis2.AbstractTestCase; /** * This class tests that AxisBindingOperation and AxisBindingMessage objects * include information about the message serialization format when the HTTP * binding is used. The test cases verify the following serialization mappings: * <ul> * <li><http:urlEncoded/> : application/x-www-form-urlencoded * <li><mime:mimeXml/> : text/xml * <li><mime:content type="ABC"/> : ABC * </ul> */ public class HttpMessagesSerializationTest extends AbstractTestCase { public static final String HTTP_MESSAGE_SERIALIZATION_WSDL_PATH = "wsdl/httpMessagesSerialization.wsdl"; private AxisBindingOperation bindingOperation; private TestConfig testConfig; public HttpMessagesSerializationTest(String testName_) { super(testName_); } public String getName() { TestConfig testConfig = getTestConfig(); return super.getName() + ". Expected Input Serialization: " + testConfig.getInputSerialization() + " ; Expected Output Serialization: " + testConfig.getOutputSerialization(); } public static Test suite() { final String targetNamespace = "http://www.example.org"; final QName serviceName = new QName(targetNamespace, "FooService"); final String httpGetPortName = "FooHttpGetPort"; final String httpPostPortName = "FooHttpPostPort"; final QName fooOperationName = new QName(targetNamespace, "getFoo"); final QName barOperationName = new QName(targetNamespace, "getBar"); final String contentTypeTextXml = "text/xml"; final String contentTypeUrlEncoded = "application/x-www-form-urlencoded"; final String contentTypeImageJpeg = "image/jpeg"; final String wsdlPath = HTTP_MESSAGE_SERIALIZATION_WSDL_PATH; TestConfig[] testConfigs = new TestConfig[] { new TestConfig(wsdlPath, serviceName, httpGetPortName, fooOperationName, contentTypeUrlEncoded, contentTypeTextXml), new TestConfig(wsdlPath, serviceName, httpGetPortName, barOperationName, contentTypeUrlEncoded, contentTypeImageJpeg), new TestConfig(wsdlPath, serviceName, httpPostPortName, fooOperationName, contentTypeTextXml, contentTypeTextXml), new TestConfig(wsdlPath, serviceName, httpPostPortName, barOperationName, contentTypeUrlEncoded, contentTypeTextXml)}; String className = HttpMessagesSerializationTest.class.getName(); TestSuite suite = new TestSuite(className); for (int i = 0; i < testConfigs.length; i++) { // Have JUnit create a TestCase instance for every test method of // this class. TestSuite testCases = new TestSuite( HttpMessagesSerializationTest.class, testConfigs[i].toString()); // Loop through the TestCase instances and inject them with the test // data. Enumeration tests = testCases.tests(); while (tests.hasMoreElements()) { HttpMessagesSerializationTest test = (HttpMessagesSerializationTest) tests.nextElement(); test.setTestConfig(testConfigs[i]); } suite.addTest(testCases); } return suite; } public void setUp() throws Exception { TestConfig testConfig = getTestConfig(); InputStream contentTypeWsdlIn = getTestResource(testConfig.getWsdlPath()); // Populate AxisService (WSDL port) WSDL11ToAxisServiceBuilder wsdl11Builder = new WSDL11ToAxisServiceBuilder( contentTypeWsdlIn, testConfig.getServiceName(), testConfig.getPortName()); AxisService service = wsdl11Builder.populateService(); // Get Binding Operation AxisEndpoint endpoint = service.getEndpoint(testConfig.getPortName()); AxisBinding binding = endpoint.getBinding(); bindingOperation = (AxisBindingOperation) binding.getChild(testConfig.getOperationName()); } // Input Serialization Format @ AxisBindingOperation public void testOperationInputSerialization() throws Exception { TestConfig testConfig = getTestConfig(); String actualInputSerialization = (String) bindingOperation.getProperty( WSDL2Constants.ATTR_WHTTP_INPUT_SERIALIZATION); assertEquals("Input Serialization Format for the '" + testConfig.getOperationName() + "' operation is Incorrect", testConfig.getInputSerialization(), actualInputSerialization); } // Output Serialization Format @ AxisBindingOperation public void testOperationOutputSerialization() throws Exception { TestConfig testConfig = getTestConfig(); String actualOutputSerialization = (String) bindingOperation.getProperty( WSDL2Constants.ATTR_WHTTP_OUTPUT_SERIALIZATION); assertEquals("Output Serialization Format for the '" + testConfig.getOperationName() + "' operation is Incorrect", testConfig.getOutputSerialization(), actualOutputSerialization); } public TestConfig getTestConfig() { return testConfig; } public void setTestConfig(TestConfig testConfig_) { testConfig = testConfig_; } private final static class TestConfig { private final String wsdlPath; private final QName serviceName; private final String portName; private final QName operationName; private final String inputSerialization; private final String outputSerialization; TestConfig(String wsdlPath, QName serviceName, String portName, QName operationName, String inputSerialization, String outputSerialization) { this.wsdlPath = wsdlPath; this.serviceName = serviceName; this.portName = portName; this.operationName = operationName; this.inputSerialization = inputSerialization; this.outputSerialization = outputSerialization; } public String getWsdlPath() { return wsdlPath; } public QName getServiceName() { return serviceName; } public String getPortName() { return portName; } public QName getOperationName() { return operationName; } public String getInputSerialization() { return inputSerialization; } public String getOutputSerialization() { return outputSerialization; } public String toString() { return "serviceName:" + serviceName + " portName:" + portName + " operationName:" + operationName + " expectedInputSerialization:" + inputSerialization + " expectedOutputSerialization:" + outputSerialization; } } }