| /* |
| * Copyright 2001-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 samples.jaxrpc; |
| |
| import org.apache.axis.encoding.XMLType; |
| import org.apache.axis.utils.Options; |
| |
| import javax.xml.namespace.QName; |
| import javax.xml.rpc.Call; |
| import javax.xml.rpc.ParameterMode; |
| import javax.xml.rpc.Service; |
| import javax.xml.rpc.ServiceFactory; |
| import java.net.URL; |
| |
| /** |
| * This version of the ever so popular GetQuote is a near-duplicate of |
| * the GetQuote1 method in samples/stock which shows how to use the AXIS |
| * client APIs with and without WSDL. This version is strictly JAX-RPC |
| * compliant. It uses no AXIS enhancements. |
| * |
| * This sample supports the use of the standard options too (-p ...) |
| * |
| * @author Russell Butek (butek@us.ibm.com) |
| */ |
| public class GetQuote1 { |
| public String symbol; |
| |
| /** |
| * This will use the WSDL to prefill all of the info needed to make |
| * the call. All that's left is filling in the args to invoke(). |
| */ |
| public float getQuote1(String args[]) throws Exception { |
| Options opts = new Options(args); |
| |
| args = opts.getRemainingArgs(); |
| |
| if (args == null) { |
| System.err.println("Usage: GetQuote <symbol>"); |
| System.exit(1); |
| } |
| |
| /* Define the service QName and port QName */ |
| /*******************************************/ |
| QName servQN = new QName("urn:xmltoday-delayed-quotes", |
| "GetQuoteService"); |
| QName portQN = new QName("urn:xmltoday-delayed-quotes", "GetQuote"); |
| |
| /* Now use those QNames as pointers into the WSDL doc */ |
| /******************************************************/ |
| Service service = ServiceFactory.newInstance().createService( |
| new URL("file:samples/stock/GetQuote.wsdl"), servQN); |
| Call call = service.createCall(portQN, "getQuote"); |
| |
| /* Strange - but allows the user to change just certain portions of */ |
| /* the URL we're gonna use to invoke the service. Useful when you */ |
| /* want to run it thru tcpmon (ie. put -p81 on the cmd line). */ |
| /********************************************************************/ |
| opts.setDefaultURL(call.getTargetEndpointAddress()); |
| call.setTargetEndpointAddress(opts.getURL()); |
| |
| /* Define some service specific properties */ |
| /*******************************************/ |
| call.setProperty(Call.USERNAME_PROPERTY, opts.getUser()); |
| call.setProperty(Call.PASSWORD_PROPERTY, opts.getPassword()); |
| |
| /* Get symbol and invoke the service */ |
| /*************************************/ |
| Object result = call.invoke(new Object[] {symbol = args[0]}); |
| |
| return ((Float) result).floatValue(); |
| } // getQuote1 |
| |
| /** |
| * This will do everything manually (ie. no WSDL). |
| */ |
| public float getQuote2(String args[]) throws Exception { |
| Options opts = new Options(args); |
| |
| args = opts.getRemainingArgs(); |
| |
| if (args == null) { |
| System.err.println("Usage: GetQuote <symbol>"); |
| System.exit(1); |
| } |
| |
| /* Create default/empty Service and Call object */ |
| /************************************************/ |
| Service service = ServiceFactory.newInstance().createService(null); |
| Call call = service.createCall(); |
| |
| /* Strange - but allows the user to change just certain portions of */ |
| /* the URL we're gonna use to invoke the service. Useful when you */ |
| /* want to run it thru tcpmon (ie. put -p81 on the cmd line). */ |
| /********************************************************************/ |
| opts.setDefaultURL("http://localhost:8080/axis/servlet/AxisServlet"); |
| |
| /* Set all of the stuff that would normally come from WSDL */ |
| /***********************************************************/ |
| call.setTargetEndpointAddress(opts.getURL()); |
| call.setProperty(Call.SOAPACTION_USE_PROPERTY, Boolean.TRUE); |
| call.setProperty(Call.SOAPACTION_URI_PROPERTY, "getQuote"); |
| call.setProperty(Call.ENCODINGSTYLE_URI_PROPERTY, |
| "http://schemas.xmlsoap.org/soap/encoding/"); |
| call.setOperationName(new QName("urn:xmltoday-delayed-quotes", "getQuote")); |
| call.addParameter("symbol", XMLType.XSD_STRING, ParameterMode.IN); |
| call.setReturnType(XMLType.XSD_FLOAT); |
| |
| /* Define some service specific properties */ |
| /*******************************************/ |
| call.setProperty(Call.USERNAME_PROPERTY, opts.getUser()); |
| call.setProperty(Call.PASSWORD_PROPERTY, opts.getPassword()); |
| |
| /* Get symbol and invoke the service */ |
| /*************************************/ |
| Object result = call.invoke(new Object[] {symbol = args[0]}); |
| |
| return ((Float) result).floatValue(); |
| } // getQuote2 |
| |
| /** |
| * This method does the same thing that getQuote1 does, but in |
| * addition it reuses the Call object to make another call. |
| */ |
| public float getQuote3(String args[]) throws Exception { |
| Options opts = new Options(args); |
| |
| args = opts.getRemainingArgs(); |
| |
| if (args == null) { |
| System.err.println("Usage: GetQuote <symbol>"); |
| System.exit(1); |
| } |
| |
| /* Define the service QName and port QName */ |
| /*******************************************/ |
| QName servQN = new QName("urn:xmltoday-delayed-quotes", |
| "GetQuoteService"); |
| QName portQN = new QName("urn:xmltoday-delayed-quotes", "GetQuote"); |
| |
| /* Now use those QNames as pointers into the WSDL doc */ |
| /******************************************************/ |
| Service service = ServiceFactory.newInstance().createService( |
| new URL("file:samples/stock/GetQuote.wsdl"), servQN); |
| Call call = service.createCall(portQN, "getQuote"); |
| |
| /* Strange - but allows the user to change just certain portions of */ |
| /* the URL we're gonna use to invoke the service. Useful when you */ |
| /* want to run it thru tcpmon (ie. put -p81 on the cmd line). */ |
| /********************************************************************/ |
| opts.setDefaultURL(call.getTargetEndpointAddress()); |
| call.setTargetEndpointAddress(opts.getURL()); |
| |
| /* Define some service specific properties */ |
| /*******************************************/ |
| call.setProperty(Call.USERNAME_PROPERTY, opts.getUser()); |
| call.setProperty(Call.PASSWORD_PROPERTY, opts.getPassword()); |
| |
| /* Get symbol and invoke the service */ |
| /*************************************/ |
| Object result = call.invoke(new Object[] {symbol = args[0]}); |
| |
| /* Reuse the Call object for a different call */ |
| /**********************************************/ |
| call.setOperationName(new QName("urn:xmltoday-delayed-quotes", "test")); |
| call.removeAllParameters(); |
| call.setReturnType(XMLType.XSD_STRING); |
| |
| System.out.println(call.invoke(new Object[]{})); |
| return ((Float) result).floatValue(); |
| } // getQuote3 |
| |
| public static void main(String args[]) throws Exception { |
| String save_args[] = new String[args.length]; |
| float val; |
| GetQuote1 gq = new GetQuote1(); |
| |
| /* Call the getQuote() that uses the WDSL */ |
| /******************************************/ |
| System.out.println("Using WSDL"); |
| System.arraycopy(args, 0, save_args, 0, args.length); |
| val = gq.getQuote1(args); |
| System.out.println(gq.symbol + ": " + val); |
| |
| /* Call the getQuote() that does it all manually */ |
| /*************************************************/ |
| System.out.println("Manually"); |
| System.arraycopy(save_args, 0, args, 0, args.length); |
| val = gq.getQuote2(args); |
| System.out.println(gq.symbol + ": " + val); |
| |
| /* Call the getQuote() that uses Axis's generated WSDL */ |
| /*******************************************************/ |
| System.out.println("WSDL + Reuse Call"); |
| System.arraycopy(save_args, 0, args, 0, args.length); |
| val = gq.getQuote3(args); |
| System.out.println(gq.symbol + ": " + val); |
| } // main |
| } |