JSP Example (can be applied to other applications on other platforms as well). The main thing to note is the line:
call.setTargetEndpointAddress("http://<gridscope_server_host_name>:8080/axis/services/ServiceGateway");
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ page import="com.gridscope.samples.serviceinterface.SampleAxisService" %> <%@ page import="com.gridscope.samples.serviceinterface.EchoHeaders" %> <%@ page import="com.gridscope.samples.serviceinterface.GoogleSearchService" %> <%@ page import="com.gridscope.samples.googleapi.*" %> <%@ page import="com.gridscope.samples.xInsider.*" %> <%@ page import="com.gridscope.samples.serviceinterface.XigniteServices" %> <%@ page import="com.gridscope.samples.businessobject.Item" %> <%@ page import="com.gridscope.samples.businessobject.Order" %> <%@ page import="org.apache.axis.encoding.ser.*" %> <%@ page import="org.apache.axis.client.Call" %> <%@ page import="org.apache.axis.client.Service" %> <%@ page import="javax.xml.rpc.ParameterMode" %> <%@ page import="javax.xml.namespace.QName" %> <%@ page import="java.util.*" %> <html:html locale="true"> <head> <title>Service Detail</title> <html:base/> </head> <body bgcolor="white"> <h3>Service Detail</h3> <html:errors /> <% /* * This code will generate a list of objects from the * database and place a reference to this list in the * request object. * */ String serviceInterfaceName = null; String requestStr = null; String resultStr = null; try { serviceInterfaceName = (String) request.getParameter("name"); requestStr = "GridScope - The Dynamic SOA Framework Company"; // init if(serviceInterfaceName.equals("SampleAxisServiceService")) resultStr = invokeSampleAxisService(requestStr); if(serviceInterfaceName.equals("EchoHeaders")) resultStr = invokeEchoHeaders(requestStr); if(serviceInterfaceName.equals("GoogleSearchService")) { requestStr = "Dynamic SOA"; resultStr = invokeGoogleSearchService("Dynamic SOA"); } if(serviceInterfaceName.equals("XigniteInsider")) { requestStr = "IBM"; resultStr = invokeXigniteService(requestStr); } } catch (Exception e) { e.printStackTrace(); } %> <%! public static String invokeGoogleSearchService(String requestStr) throws Exception { // define qnames String targetNamespace = "urn:GoogleSearch"; String schemaNamespace = "urn:GoogleSearch"; QName serviceName = new QName(targetNamespace, "GoogleSearchService"); QName portName = new QName(targetNamespace, "GoogleSearchPort"); QName operationName = new QName(schemaNamespace, "doGoogleSearch"); // create service Service service = new Service(); Call call = (Call) service.createCall(); // set port and operation name call.setPortTypeName(portName); call.setOperationName(operationName); QName strQName = new QName("http://www.w3.org/2001/XMLSchema", "string"); QName intQName = new QName("http://www.w3.org/2001/XMLSchema", "int"); QName boolQName = new QName("http://www.w3.org/2001/XMLSchema", "boolean"); call.addParameter("key", strQName, ParameterMode.IN); call.addParameter("q", strQName, ParameterMode.IN); call.addParameter("start", intQName, ParameterMode.IN); call.addParameter("maxResults", intQName, ParameterMode.IN); call.addParameter("filter", boolQName, ParameterMode.IN); call.addParameter("restrict", strQName, ParameterMode.IN); call.addParameter("safeSearch", boolQName, ParameterMode.IN); call.addParameter("lr", strQName, ParameterMode.IN); call.addParameter("ie", strQName, ParameterMode.IN); call.addParameter("oe", strQName, ParameterMode.IN); // return type call.setReturnType(org.apache.axis.Constants.XSD_STRING); call.setReturnType(new QName("urn:GoogleSearch", "GoogleSearchResult"), GoogleSearchResult.class); call.setReturnQName(new QName("", "return")); // register type mapping call.registerTypeMapping(GoogleSearchResult.class, new QName("urn:GoogleSearch", "GoogleSearchResult"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(DirectoryCategory.class, new QName("urn:GoogleSearch", "DirectoryCategory"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(ResultElement.class, new QName("urn:GoogleSearch", "ResultElement"), BeanSerializerFactory.class, BeanDeserializerFactory.class); // set end point address call.setTargetEndpointAddress("http://localhost:8080/axis/services/ServiceGateway"); // execute // Invoke the WebService long startTimeMillis = System.currentTimeMillis(); GoogleSearchResult result = (GoogleSearchResult) call.invoke(new Object[]{"EdkmBM5QFHLqNeePQV4tUTMRLs/aTt8h", requestStr, new Integer(0), new Integer(10), new Boolean(false), null, new Boolean(false), null, null, null}); StringBuffer resultStrBuf = new StringBuffer(); for (int i = 0; i < result.getResultElements().length; i++) { ResultElement element = result.getResultElements()[i]; resultStrBuf.append((i+1) + ": " + element.getTitle() + "<br>"); } long endTimeMillis = System.currentTimeMillis(); System.out.println("Search Query: " + requestStr + " executed in " + (endTimeMillis - startTimeMillis) + " ms"); return resultStrBuf.toString(); } public static String invokeEchoHeaders(String requestStr) throws Exception { // define qnames String targetNamespace = "http://localhost:8080/axis/EchoHeaders.jws"; String schemaNamespace = "http://localhost:8080/axis/EchoHeaders.jws"; QName serviceName = new QName(targetNamespace, "EchoHeadersService"); QName portName = new QName(targetNamespace, "EchoHeaders"); QName operationName = new QName(schemaNamespace, "echo"); // create service Service service = new Service(); Call call = (Call) service.createCall(); // set port and operation name call.setPortTypeName(portName); call.setOperationName(operationName); // add parameters QName strQName = new QName("http://www.w3.org/2001/XMLSchema", "string"); call.addParameter("param", strQName, ParameterMode.IN); call.setReturnType(new javax.xml.namespace.QName("http://localhost:8080/axis/EchoHeaders.jws", "echoReturn")); // set end point address call.setTargetEndpointAddress("http://localhost:8080/axis/services/ServiceGateway"); // Invoke the WebService long startTimeMillis = System.currentTimeMillis(); String resultStr = (String) call.invoke(new Object[]{requestStr}); long endTimeMillis = System.currentTimeMillis(); System.out.println("Search Query: " + requestStr + " executed in " + (endTimeMillis - startTimeMillis) + " ms"); System.out.println(resultStr); return resultStr; } public static String invokeSampleAxisService(String requestStr) throws Exception { // define qnames String targetNamespace = "http://localhost:8080/axis/services/SampleAxisService"; String schemaNamespace = "http://service.samples.gridscope.com"; QName serviceName = new QName(targetNamespace, "SampleAxisServiceService"); QName portName = new QName(targetNamespace, "SampleAxisService"); QName operationName = new QName(targetNamespace, "echoObject"); // create service Service service = new Service(); Call call = (Call) service.createCall(); QName qn = new QName(targetNamespace, "Item"); call.registerTypeMapping(Item.class, qn, new org.apache.axis.encoding.ser.BeanSerializerFactory (Item.class, qn), new org.apache.axis.encoding.ser.BeanDeserializerFactory (Item.class, qn)); QName qnOrder = new QName(targetNamespace, "Order"); call.registerTypeMapping(Order.class, qnOrder, new org.apache.axis.encoding.ser.BeanSerializerFactory (Order.class, qnOrder), new org.apache.axis.encoding.ser.BeanDeserializerFactory (Order.class, qnOrder)); // set port and operation name call.setPortTypeName(portName); call.setOperationName(operationName); Item item = new Item(); item.setId(2); item.setName("Porsche Boxter 800X"); item.setDescription(requestStr); // add parameters call.addParameter("item", qn, ParameterMode.IN); call.setReturnType(new javax.xml.namespace.QName("http://localhost:8080/axis/services/SampleAxisService", "Order")); // set end point address call.setTargetEndpointAddress("http://localhost:8080/axis/services/ServiceGateway"); // Invoke the WebService long startTimeMillis = System.currentTimeMillis(); Order order = (Order) call.invoke(new Object[]{item}); String resultStr = "echoObject : " + order.getId() + "; " + order.getName() + "; " + order.getPrice(); long endTimeMillis = System.currentTimeMillis(); System.out.println("Search Query: " + requestStr + " executed in " + (endTimeMillis - startTimeMillis) + " ms"); return resultStr; } public static String invokeXigniteService(String requestStr) throws Exception { // define qnames String targetNamespace = "http://www.xignite.com/services/"; String targetNamespace2 = ""; String schemaNamespace = "http://www.xignite.com/services/"; QName serviceName = new QName(targetNamespace, "XigniteInsider"); QName portName = new QName(targetNamespace, "XigniteInsiderSoap"); QName operationName = new QName(schemaNamespace, "GetOfficers"); // create service Service service = new Service(); Call call = (Call) service.createCall(); // set port and operation name call.setPortTypeName(portName); call.setOperationName(operationName); QName strQName = new QName("http://www.w3.org/2001/XMLSchema", "string"); QName intQName = new QName("http://www.w3.org/2001/XMLSchema", "int"); QName boolQName = new QName("http://www.w3.org/2001/XMLSchema", "boolean"); call.addParameter("IssuerIdentifier", strQName, ParameterMode.IN); call.addParameter("IssuerIdentifierType", strQName, ParameterMode.IN); // return type call.setReturnType(new QName(targetNamespace, "Roster"), Roster.class); call.setReturnQName(new QName("", "GetOfficersResult")); // register type mapping call.registerTypeMapping(Roster.class, new QName(targetNamespace2, "Roster"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(Address.class, new QName(targetNamespace2, "Address"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(Security.class, new QName(targetNamespace2, "Security"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(OutcomeTypes.class, new QName(targetNamespace2, "OutcomeTypes"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(Role.class, new QName(targetNamespace2, "Role"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(Relationship.class, new QName(targetNamespace2, "Relationship"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(Common.class, new QName(targetNamespace2, "Common"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(Role[].class, new QName(targetNamespace2, "ArrayOfRole"), ArraySerializerFactory.class, ArrayDeserializerFactory.class); // set end point address call.setTargetEndpointAddress("http://localhost:8080/axis/services/ServiceGateway"); call.setProperty(call.SOAPACTION_USE_PROPERTY, new Boolean(true)); call.setProperty(call.SOAPACTION_URI_PROPERTY, "http://www.xignite.com/services/GetOfficers"); // execute // Invoke the WebService Roster result = (Roster) call.invoke(new Object[]{"IBM", "Symbol"}); System.out.println("Search Query: " + requestStr); String resultStr = result.toString(); System.out.println(resultStr); return resultStr; } %> <table> <tr><td colspan="2" class="GridScopeTitleRowStyle"><b>Edit Service</td></tr> <tr> <td class="GridScopeBlockCaptionStyle">Service Name</td> <td class="GridScopeBlockCellStyle"><%= serviceInterfaceName %></td> </tr> <tr> <td class="GridScopeBlockCaptionStyle"><b>Service Input</b></td> <td class="GridScopeBlockCellStyle"><%= requestStr %></td> </tr> <tr> <td class="GridScopeBlockCaptionStyle"><b>Service Response</b></td> <td class="GridScopeBlockCellStyle"><%= resultStr %></td> </tr> </table> </body> </html:html> |