用axis發佈webservices(三)

一、對象參數的傳遞

首先是我們要傳輸的變量對象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就是無效的 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章