一、對象參數的傳遞
首先是我們要傳輸的變量對象Order,代碼如下:
package samples.userguide.example5;
public class Order
{
private String customerName;
private String shippingAddress;
public String getCustomerName()
{ return customerName; }
public void setCustomerName(String name)
{ customerName = name; }
}
要發布的services的代碼如下:
package samples.userguide.example5;
public class BeanService
{
public Order getNewOrder(Order order)
{
order.setCustomerName("liuyujun");
return order;
}
}
然后我們只要在配置文件server-config.wsdd里加入下面這段就可以發布了
<service name="OrderProcessor" provider="java:RPC">
<parameter name="className" value="samples.userguide.example5.BeanService"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" languageSpecificType="java:samples.userguide.example5.Order"/>
</service>
特別要注意多了beanMapping這部分,qname指明我們用自己命名空間里的哪個對象,xmlns:myNS則指明了我們的命名空間,后面還一個指明了用到的對象類。
客戶端調用程序:
package samples.userguide.example5;
public class Client
{
private final static String targetEndpointAddress = "http://localhost:8080/axis/services/OrderProcessor";
private final static QName qn = new QName( "urn:BeanService", "Order" );
public static void main(String [] args) throws Exception
{
//創建一個參數對象
Order order = new Order();
order.setCustomerName("Glen Daniels");
Service service = new Service();
Call call = (Call) service.createCall();
//注冊對象類型
call.registerTypeMapping(Order.class, qn,
new org.apache.axis.encoding.ser.
BeanSerializerFactory(Order.class, qn),
new org.apache.axis.encoding.ser.
BeanDeserializerFactory(Order.class, qn));
call.setTargetEndpointAddress(new java.net.URL(targetEndpointAddress));
call.setOperationName(new QName("OrderProcessor", "getNewOrder"));
call.addParameter("order", qn, ParameterMode.IN);
call.setReturnType(qn, Order.class);
Order newOrder = (Order) call.invoke(new Object[] {order});
System.out.println("new custname:"+newOrder.getCustomerName());
}
}
這樣就能看到返回的效果了;
二、獲得訪問者信息
MessageContext context = MessageContext.getCurrentContext();
HttpServletRequest req = (HttpServletRequest) context.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
這樣就可以得到ruquest對象獲得相關信息了,當然request的有些功能是用不了的,比如,getSession就是無效的