/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed 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 test.encoding; import junit.framework.TestCase; import org.apache.axis.Constants; import org.apache.axis.Message; import org.apache.axis.MessageContext; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.configuration.BasicServerConfig; import org.apache.axis.description.OperationDesc; import org.apache.axis.description.ParameterDesc; import org.apache.axis.description.ServiceDesc; import org.apache.axis.handlers.soap.SOAPService; import org.apache.axis.message.RPCElement; import org.apache.axis.message.RPCParam; import org.apache.axis.message.SOAPEnvelope; import org.apache.axis.providers.java.RPCProvider; import org.apache.axis.server.AxisServer; import org.apache.axis.transport.local.LocalTransport; import javax.xml.namespace.QName; /** * A test which confirms that we can correctly call methods where null arguments * are represented by omission from the SOAP envelope. * * @author Glen Daniels (gdaniels@apache.org) */ public class TestOmittedValues extends TestCase { String header = "\n" + "\n" + "\n" + "\n"; String missingParam2 = " One\n" + " Three\n"; String footer = "\n" + "\n" + "\n"; public TestOmittedValues(String s) { super(s); } public TestOmittedValues() { super("service version"); } public void testOmittedValue() throws Exception { // Set up a server and deploy our service BasicServerConfig config = new BasicServerConfig(); AxisServer server = new AxisServer(config); SOAPService service = new SOAPService(new RPCProvider()); service.setOption("className", "test.encoding.TestOmittedValues"); service.setOption("allowedMethods", "*"); ServiceDesc desc = service.getServiceDescription(); // We need parameter descriptors to make sure we can match by name // (the only way omitted==null can work). ParameterDesc [] params = new ParameterDesc [] { new ParameterDesc(new QName("", "param1"), ParameterDesc.IN, null), new ParameterDesc(new QName("", "param2"), ParameterDesc.IN, null), new ParameterDesc(new QName("", "param3"), ParameterDesc.IN, null), }; OperationDesc oper = new OperationDesc("method", params, null); desc.addOperationDesc(oper); config.deployService("testOmittedValue", service); String msg = header + missingParam2 + footer; Message message = new Message(msg); MessageContext context = new MessageContext(server); context.setRequestMessage(message); Call call = new Call(new Service()); LocalTransport transport = new LocalTransport(server); transport.setRemoteService("testOmittedValue"); call.setTransport(transport); SOAPEnvelope resEnv = call.invoke(message.getSOAPEnvelope()); RPCElement rpcElem = (RPCElement)resEnv.getFirstBody(); RPCParam param = (RPCParam)rpcElem.getParams().get(0); assertEquals("OK!", param.getObjectValue()); } // Server-side test method for omitting values public String method(String p1, String p2, String p3) { if (p1.equals("One") && p2 == null && p3.equals("Three")) { return "OK!"; } return "Bad arguments!"; } }