package samples.bidbuy ; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.encoding.ser.BeanDeserializerFactory; import org.apache.axis.encoding.ser.BeanSerializerFactory; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import java.math.BigDecimal; import java.net.URL; import java.util.Calendar; import java.util.StringTokenizer; import java.util.Vector; public class v3 implements vInterface { public void register(String registryURL, samples.bidbuy.Service s) throws Exception { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new URL(registryURL) ); call.setOperationName( new QName("http://www.soapinterop.org/Register", "Register" )); call.addParameter("ServiceName", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("ServiceUrl", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("ServiceType", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("ServiceWSDL", XMLType.XSD_STRING, ParameterMode.IN); call.invoke( new Object[] { s.getServiceName(), s.getServiceUrl(), s.getServiceType(), s.getServiceWsdl() } ); } catch( Exception e ) { e.printStackTrace(); throw e ; } } public void unregister(String registryURL, String name) throws Exception { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new URL(registryURL) ); call.setOperationName( new QName("http://www.soapinterop.org/Unregister", "Unregister" )); call.addParameter( "ServiceName", XMLType.XSD_STRING, ParameterMode.IN); call.invoke( new Object[] { name } ); } catch( Exception e ) { e.printStackTrace(); throw e ; } } public Boolean ping(String serverURL) throws Exception { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new URL(serverURL) ); call.setUseSOAPAction( true ); call.setSOAPActionURI( "http://www.soapinterop.org/Ping" ); call.setOperationName( new QName("http://www.soapinterop.org/Bid", "Ping" )); call.invoke( (Object[]) null ); return( new Boolean(true) ); } catch( Exception e ) { e.printStackTrace(); throw e ; } } public Vector lookupAsString(String registryURL) throws Exception { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new URL(registryURL) ); call.setUseSOAPAction( true ); call.setSOAPActionURI( "http://www.soapinterop.org/LookupAsString" ); call.setOperationName( new QName("http://www.soapinterop.org/Registry", "LookupAsString" )); call.addParameter( "ServiceType", XMLType.XSD_STRING, ParameterMode.IN); call.setReturnType( XMLType.XSD_DOUBLE ); String res= (String) call.invoke( new Object[] { "Bid" } ); if ( res == null ) return( null ); StringTokenizer lineParser = new StringTokenizer( res, "\n" ); Vector services = new Vector(); while ( lineParser.hasMoreTokens() ) { String line = (String) lineParser.nextElement(); StringTokenizer wordParser = new StringTokenizer( line, "\t" ); samples.bidbuy.Service s = null ; for ( int i = 0 ; wordParser.hasMoreTokens() && i < 4 ; i++ ) switch(i) { case 0 : s = new samples.bidbuy.Service(); if ( services == null ) services = new Vector(); services.add( s ); s.setServiceName( (String) wordParser.nextToken()); break ; case 1 : s.setServiceUrl( (String) wordParser.nextToken()); break ; case 2 : s.setServiceType( (String) wordParser.nextToken()); break ; case 3 : s.setServiceWsdl( (String) wordParser.nextToken()); break ; } } return( services ); } catch( Exception e ) { e.printStackTrace(); throw e ; } } public double requestForQuote(String serverURL) throws Exception { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new URL(serverURL) ); call.setOperationName(new QName("http://www.soapinterop.org/Bid", "RequestForQuote") ); call.setReturnType( XMLType.XSD_DOUBLE ); call.setUseSOAPAction( true ); call.setSOAPActionURI( "http://www.soapinterop.org/RequestForQuote" ); call.addParameter( "ProductName", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter( "Quantity", XMLType.XSD_INT, ParameterMode.IN); Object r = call.invoke( new Object[] { "widget", new Integer(10) } ); /* sd.addOutputParam("RequestForQuoteResult", SOAPTypeMappingRegistry.XSD_DOUBLE); sd.addOutputParam("Result", SOAPTypeMappingRegistry.XSD_DOUBLE); sd.addOutputParam("return", SOAPTypeMappingRegistry.XSD_DOUBLE); */ // ??? if ( r instanceof Float ) r = ((Float)r).toString(); if ( r instanceof String ) r = new Double((String) r); Double res = (Double) r ; return( res.doubleValue() ); } catch( Exception e ) { e.printStackTrace(); throw e ; } } public String simpleBuy(String serverURL, int quantity ) throws Exception { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new URL(serverURL) ); call.setUseSOAPAction( true ); call.setSOAPActionURI( "http://www.soapinterop.org/SimpleBuy" ); call.setOperationName( new QName("http://www.soapinterop.org/Bid", "SimpleBuy") ); call.setReturnType( XMLType.XSD_STRING ); call.addParameter( "Address", XMLType.XSD_STRING, ParameterMode.IN ); call.addParameter( "ProductName", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter( "Quantity", XMLType.XSD_INT, ParameterMode.IN ); String res = (String) call.invoke(new Object[] { "123 Main St.", "Widget", new Integer(quantity)}); /* sd.addOutputParam("SimpleBuyResult", SOAPTypeMappingRegistry.XSD_STRING); sd.addOutputParam("Result", SOAPTypeMappingRegistry.XSD_STRING); sd.addOutputParam("return", SOAPTypeMappingRegistry.XSD_STRING); */ return( res ); } catch( Exception e ) { e.printStackTrace(); throw e ; } } public String buy(String serverURL, int quantity, int numItems, double price) throws Exception { try { int i ; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new URL(serverURL) ); call.setUseSOAPAction( true ); call.setSOAPActionURI( "http://www.soapinterop.org/Buy" ); call.setReturnType( XMLType.XSD_STRING ); /* sd.addOutputParam("BuyResult", SOAPTypeMappingRegistry.XSD_STRING); sd.addOutputParam("Result", SOAPTypeMappingRegistry.XSD_STRING); sd.addOutputParam("return", SOAPTypeMappingRegistry.XSD_STRING); */ // register the PurchaseOrder class QName poqn = new QName("http://www.soapinterop.org/Bid", "PurchaseOrder"); Class cls = PurchaseOrder.class; call.registerTypeMapping(cls, poqn, BeanSerializerFactory.class, BeanDeserializerFactory.class); // register the Address class QName aqn = new QName("http://www.soapinterop.org/Bid", "Address"); cls = Address.class; call.registerTypeMapping(cls, aqn, BeanSerializerFactory.class, BeanDeserializerFactory.class); // register the LineItem class QName liqn = new QName("http://www.soapinterop.org/Bid", "LineItem"); cls = LineItem.class; call.registerTypeMapping(cls, liqn, BeanSerializerFactory.class, BeanDeserializerFactory.class); LineItem[] lineItems = new LineItem[numItems]; for ( i = 0 ; i < numItems ; i++ ) lineItems[i] = new LineItem("Widget"+i,quantity,new BigDecimal(price)); PurchaseOrder po = new PurchaseOrder( "PO1", Calendar.getInstance(), new Address("Mr Big", "40 Wildwood Lane", "Weston", "CT", "06883"), new Address("Mr Big's Dad", "40 Wildwood Lane", "Weston", "CT", "06883"), lineItems ); call.addParameter( "PO", poqn, ParameterMode.IN ); call.setOperationName( new QName("http://www.soapinterop.org/Bid", "Buy") ); String res = (String) call.invoke( new Object[] { po } ); return( res ); } catch( Exception e ) { e.printStackTrace(); throw e ; } } }