1,订单bean
package sample;
public class Order {
? // ID for order
? private String orderID = null;
? // date of order
? private String orderDate= null;
? // getter methods
? public String getOrderID() {
???????? return orderID;
? }
? public String getOrderID() {
??????? return orderID;
? }
? // setter methods
? public void setOrderID(String orderID) {
????????????? this.orderID = orderID;
? } public void setOrderDate(String orderDate) {
??????????????? this. orderDate = orderDate;
? }
}
清单2:Order类相应的Holder类
package sample.holders;
?
public class OrderHolder {
? // Order''s object
? public Order? value = null;
?
? // default constructor
? public void OrderHolder () { }
?
? // constructor,which takes value as a parameter
? public void OrderHolder (Order value) {
???????? this.value=value;
? }
}
清单3:订单处理Web服务
package sample;
public class OrderProcessingService {
? //订单处理
? public String processOrder(String orderID,
???????????????????????????? OrderHolder orderHolder ) {
???????????????????????????? String status = "pending";
??? Order order = new Order();
??? order.setOrderID(orderID);
??? order.setOrderDate("03 March 2003");
?
??? orderHolder.value = order;
??? status = "complete" ;
??? return status;
? }
? //更新订单
? public String updateOrder(OrderHolder orderHolder) {
??????????????????????????? String status = "pending";
??? // perform update here
??? Order order = orderHolder.value;
??? order.setOrderDate("03 April 2003");
??? orderHolder.value = order;
??? //set the status
???? status = "complete" ;
??? return status;
? }
}
至此,我们完成了所有web服务的开发。上面的部分跟我们开发一个其它的java应用没有什么区别。
清单4:部署文件deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
? xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
?
<service name=" OrderProcessingService" provider="java:RPC">
? <parameter name="className"
???????????? value="sample.OrderProcessingService "/>
? <parameter name="allowedMethods" value="*"/>
??? <operation name="processOrder">
????? <parameter name="arg1" mode="IN"/>
????? <parameter name="arg2" mode="OUT"/>
??? </operation>
??? <operation name="updateOrder">
????? <parameter name="arg1" mode="INOUT"/>
??? </operation>
</service>
</deployment>
把改文家放在跟web.xml同一个目录下
切换到web.xml目录下面之后,运行下面的命令:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient
-lhttp://localhost:8080/axis/services/AdminService deploy.wsdd
其中,AXISCLASSPATH用于设置Axis环境(详情请参考axis installation guide)
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.*;
import javax.xml.namespace.QName;
import java.util.*;
import sample.*;
?
/**
?* This class illustrates how to use the JAX-RPC API to invoke
?* the Order Processing Web service dynamically
?*/
public class DynamicClient {
? public static void main(String[] args) throws Exception {
?
?
? // create service factory
? ServiceFactory factory = ServiceFactory.newInstance();
?
? // define qnames
? String targetNamespace = "OrderProcessingService";
?
? QName serviceName = new QName(targetNamespace,
??????????????????????????????? "OrderProcessingService");
?
? QName portName = new QName(targetNamespace,
???????????????????????????? "OrderProcessingService");
? QName operationName = new QName(targetNamespace,"updateOrder");
?
? // create service
? Service service = new Service();
? Call???? call?? = (Call) service.createCall();
?? Qname qn?????? = new Qname(targetNamespace,"OrderHolder");
?
? call.registerTypeMapping(OrderHolder.class,qn,
? new org.apache.axis.encoding.ser.BeanSerializerFactory
????? (OrderHolder.class,qn),
? new org.apache.axis.encoding.ser.BeanDeserializerFactory
????? (TicketHolder.class,qn));
?
? // set port and operation name
? call.setPortTypeName(portName);
? call.setOperationName(operationName);
?
? // add parameters
? call.addParameter( "arg1",serviceName,ParameterMode.INOUT );
? call.setReturnType( XMLType.XSD_STRING );
?
? Order order = new Order ();
? order.setOrderID("Order001");
? order.setOrderDate("03 March 2003");
?
?
? // set end point address
? call.setTargetEndpointAddress(
?????? "http://localhost:8080/axis/services/OrderProcessing");
?
? // Invoke the WebService
? String result = (String) call.invoke( new Object[] { order } );
? System.out.println("result : " +result);
?
? Map outparams = call.getOutputParams();
?
? System.out.println("Got the outparams");
?
?
}
? 运行客户端
用下列命令运行客户端:
java -cp %AXISCLASSPATH% sample.client.DynamicClient