/* * 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 samples.userguide; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.axiom.soap.SOAP12Constants; import org.apache.axiom.util.UIDGenerator; import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.context.ConfigurationContextFactory; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.axis2.transport.http.HttpTransportProperties; import org.apache.neethi.Policy; import org.apache.neethi.PolicyEngine; import org.apache.rampart.RampartMessageData; import org.apache.sandesha2.client.SandeshaClientConstants; import org.apache.sandesha2.client.SandeshaClient; import org.apache.sandesha2.Sandesha2Constants; import samples.common.StockQuoteHandler; import java.io.File; import java.net.URL; /** * See build.xml for options */ public class StockQuoteClient { private static String getProperty(String name, String def) { String result = System.getProperty(name); if (result == null || result.length() == 0) { result = def; } return result; } public static void main(String[] args) { try { executeClient(); } catch (Exception e) { e.printStackTrace(); } System.exit(0); } private static void printResult() throws Exception { if ("placeorder".equals(InnerStruct.MODE)) { System.out.println("Order placed for " + InnerStruct.QUANTITY + " shares of stock " + InnerStruct.SYMBOL + " at a price of $ " + InnerStruct.PRICE); } else { if ("customquote".equals(InnerStruct.MODE)) { System.out.println("Custom :: Stock price = $" + StockQuoteHandler.parseCustomQuoteResponse(InnerStruct.RESULT)); } else if ("quote".equals(InnerStruct.MODE)) { System.out.println("Standard :: Stock price = $" + StockQuoteHandler.parseStandardQuoteResponse(InnerStruct.RESULT)); } else if ("dualquote".equals(InnerStruct.MODE)) { while (true) { if (InnerStruct.COMPLETED) { System.out.println("Standard dual channel :: Stock price = $" + StockQuoteHandler.parseStandardQuoteResponse(InnerStruct.RESULT)); System.exit(0); } else { Thread.sleep(100); } } } else if ("fullquote".equals(InnerStruct.MODE)) { System.out.println("Full :: Average price = $" + StockQuoteHandler.parseFullQuoteResponse(InnerStruct.RESULT)); } else if ("marketactivity".equals(InnerStruct.MODE)) { System.out.println("Activity :: Average price = $" + StockQuoteHandler.parseMarketActivityResponse(InnerStruct.RESULT)); } } } public static OMElement executeTestClient() throws Exception { executeClient(); return InnerStruct.RESULT; } public static void executeClient() throws Exception { // defaults String symbol = getProperty("symbol", "IBM"); String soapVer = getProperty("soapver", "soap11"); String mode = getProperty("mode", "quote"); String addUrl = getProperty("addurl", null); String trpUrl = getProperty("trpurl", null); String prxUrl = getProperty("prxurl", null); String repo = getProperty("repository", "client_repo"); String svcPolicy = getProperty("policy", null); String rest = getProperty("rest", null); String wsrm = getProperty("wsrm", null); String wsrm11 = getProperty("wsrm11", null); String itr = getProperty("itr", "1"); int iterations = 1; boolean infinite = false; String pIterations = getProperty("i", null); if (pIterations != null) { try { iterations = Integer.parseInt(pIterations); if (iterations != -1) { infinite = false; } } catch (NumberFormatException e) { // run with default values } } double price = 0; int quantity = 0; ConfigurationContext configContext = null; Options options = new Options(); OMElement payload = null; ServiceClient serviceClient; if (repo != null && !"null".equals(repo)) { configContext = ConfigurationContextFactory. createConfigurationContextFromFileSystem(repo, repo + File.separator + "conf" + File.separator + "axis2.xml"); serviceClient = new ServiceClient(configContext, null); } else { serviceClient = new ServiceClient(); } if ("customquote".equals(mode)) { payload = StockQuoteHandler.createCustomQuoteRequest(symbol); options.setAction("urn:getQuote"); } else if ("fullquote".equals(mode)) { payload = StockQuoteHandler.createFullQuoteRequest(symbol); options.setAction("urn:getFullQuote"); } else if ("placeorder".equals(mode)) { price = getRandom(100, 0.9, true); quantity = (int) getRandom(10000, 1.0, true); payload = StockQuoteHandler.createPlaceOrderRequest(price, quantity, symbol); options.setAction("urn:placeOrder"); } else if ("marketactivity".equals(mode)) { payload = StockQuoteHandler.createMarketActivityRequest(); options.setAction("urn:getMarketActivity"); } else if ("quote".equals(mode) || "dualquote".equals(mode)) { payload = StockQuoteHandler.createStandardQuoteRequest( symbol, Integer.parseInt(itr)); options.setAction("urn:getQuote"); if ("dualquote".equals(mode)) { serviceClient.engageModule("addressing"); options.setUseSeparateListener(true); } } // set addressing, transport and proxy url if (addUrl != null && !"null".equals(addUrl)) { serviceClient.engageModule("addressing"); options.setTo(new EndpointReference(addUrl)); } if (trpUrl != null && !"null".equals(trpUrl)) { options.setProperty(Constants.Configuration.TRANSPORT_URL, trpUrl); } if (prxUrl != null && !"null".equals(prxUrl)) { HttpTransportProperties.ProxyProperties proxyProperties = new HttpTransportProperties.ProxyProperties(); URL url = new URL(prxUrl); proxyProperties.setProxyName(url.getHost()); proxyProperties.setProxyPort(url.getPort()); proxyProperties.setUserName(""); proxyProperties.setPassWord(""); proxyProperties.setDomain(""); options.setProperty(HTTPConstants.PROXY, proxyProperties); } // apply any service policies if any if (svcPolicy != null && !"null".equals(svcPolicy) && svcPolicy.length() > 0) { System.out.println("Using WS-Security"); serviceClient.engageModule("addressing"); serviceClient.engageModule("rampart"); options.setProperty( RampartMessageData.KEY_RAMPART_POLICY, loadPolicy(svcPolicy)); } if (Boolean.parseBoolean(rest)) { System.out.println("Sending as REST"); options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE); } if (Boolean.parseBoolean(wsrm) || Boolean.parseBoolean(wsrm11)) { System.out.println("Using WS-RM"); serviceClient.engageModule("sandesha2"); if (Boolean.parseBoolean(wsrm11)){ options.setProperty(SandeshaClientConstants.RM_SPEC_VERSION, Sandesha2Constants.SPEC_VERSIONS.v1_1); } options.setProperty(SandeshaClientConstants.LAST_MESSAGE, Constants.VALUE_TRUE); options.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID, UIDGenerator.generateURNString()); } if ("soap12".equals(soapVer)) { options.setSoapVersionURI(SOAP12Constants. SOAP_ENVELOPE_NAMESPACE_URI); } serviceClient.setOptions(options); InnerStruct.MODE = mode; InnerStruct.SYMBOL = symbol; InnerStruct.PRICE = price; InnerStruct.QUANTITY = quantity; if ("placeorder".equals(mode)) { serviceClient.fireAndForget(payload); Thread.sleep(5000); } else if ("dualquote".equals(mode)) { serviceClient.sendReceiveNonBlocking(payload, new StockQuoteCallback()); printResult(); } else { long i = 0; while (i < iterations || infinite) { InnerStruct.RESULT = serviceClient.sendReceive(payload); i++; printResult(); if (Boolean.parseBoolean(wsrm) || Boolean.parseBoolean(wsrm11)) { // give some time for RM to terminate normally if (Boolean.parseBoolean(wsrm11)){ SandeshaClient.terminateSequence(serviceClient); } Thread.sleep(5000); if (configContext != null) { configContext.getListenerManager().stop(); } serviceClient.cleanup(); } } } } public static class InnerStruct { static String MODE = null; static String SYMBOL = null; static int QUANTITY = 0; static double PRICE = 0; static boolean COMPLETED = false; static OMElement RESULT = null; } private static Policy loadPolicy(String xmlPath) throws Exception { StAXOMBuilder builder = new StAXOMBuilder(xmlPath); return PolicyEngine.getPolicy(builder.getDocumentElement()); } private static double getRandom(double base, double varience, boolean onlypositive) { double rand = Math.random(); return (base + ((rand > 0.5 ? 1 : -1) * varience * base * rand)) * (onlypositive ? 1 : (rand > 0.5 ? 1 : -1)); } }