xFire 下的WebService 客户端接入

import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.httpclient.params.HttpClientParams;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender; 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.ourlinc.tern.util.XmlHelper;

/**
 * web service接口封装
 * 
 * 
 */
public class Test {

    public static void main(String[] args) {
        Test test = new Test();
        test.setWorkNo("xx");
        test.setPassword("xx");
        test.setWsdl("http://xxx/xxx.asmx?WSDL");
        test.getCarrayStations();
    }

    public Test() {
        super();
    }

    /**
     * soap验证账户
     */
    ClientAuthenticationHandler m_Account = new ClientAuthenticationHandler();

    public void setWorkNo(String workno) {
        m_Account.workno = workno;
    }

    public void setPassword(String password) {
        m_Account.password = password;
    }

    public static class ClientAuthenticationHandler extends AbstractHandler {
        private String workno;
        private String password;

        public ClientAuthenticationHandler(String username, String password) {
            super();
            this.workno = username;
            this.password = password;
        }

        public ClientAuthenticationHandler() {
            super();
        }

        // 命名空间 http://tempuri.org/
        public static final String NS = "http://tempuri.org/";

        public void invoke(MessageContext context) throws Exception {
            // 为SOAP Header构造验证信息
            org.jdom.Element el = new org.jdom.Element("header", org.jdom.Namespace
                    .getNamespace(NS));
            context.getOutMessage().setHeader((org.jdom.Element) el);
            org.jdom.Element auth = new org.jdom.Element("SecurityHeader", org.jdom.Namespace
                    .getNamespace(NS));
            org.jdom.Element workno_el = new org.jdom.Element("WorkNo", org.jdom.Namespace
                    .getNamespace(NS));
            workno_el.addContent(workno);
            org.jdom.Element password_el = new org.jdom.Element("Password", org.jdom.Namespace
                    .getNamespace(NS));
            password_el.addContent(password);
            auth.addContent(workno_el);
            auth.addContent(password_el);
            el.addContent(auth);
        }
    }

    // 查询全部始发车站(一个售票系统可能有多个始发车站)
    public void getCarrayStations() {
        Object[] result = null;
        Client client = null;
        Object[] params = null;
        try {
            params = new Object[] { "" };
            client = getClient(m_Wsdl);
            client.toString();
            result = client.invoke("GetCarrayStations", params);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String[] results = getResultStrings(result);
        if (null != results) {
            for (String s : results) {
                System.out.println(s);
            }
        }
        closeClient(client);
        return;
    }

    URL m_Wsdl;

    Client client = getClient(m_Wsdl);

    /**
     * 取得服务接口客户端实例
     * 
     * @return 客户端实例
     * @throws Exception
     */
    Client getClient(URL wsdl) {
        Client client;
        try {
            client = new Client(wsdl);
            HttpClientParams params = new HttpClientParams();
            params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE, Boolean.FALSE);
            // params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT,
            // 10 * 1000L);
            params.setConnectionManagerTimeout(10 * 1000L);
            // params.setParameter(HttpClientParams.SO_TIMEOUT, 20 *1000L);
            params.setSoTimeout(40 * 1000);
            client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS, params);
            client.addOutHandler(m_Account);
            return client;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 出错时关闭由getClient()取得的客户端实例
     * 
     * @param client
     *            客户端实例
     */
    void closeClient(Client client) {
        client.close();
    }

    public void setWsdl(String wsdl) {
        URL url;
        if (wsdl.startsWith("http://") || wsdl.startsWith("https://")) {
            try {
                url = new URL(wsdl);
            } catch (MalformedURLException e) {
                throw new IllegalArgumentException(e);
            }
        } else {
            url = ClassLoader.getSystemResource(wsdl);
            if (null == url) {
                url = Thread.currentThread().getContextClassLoader().getResource(wsdl);
            }
        }
        m_Wsdl = url;
    }

    String[] getResultStrings(Object[] result) {
        if (null == result || 0 == result.length) {
            System.out.println("接口无返回结果");
            // _Logger.info("接口无返回结果");
            return null;
        }
        Element e = ((Document) result[0]).getDocumentElement();
        NodeList nodes = e.getChildNodes();
        String[] items = new String[nodes.getLength()];
        for (int i = 0; i < items.length; i++) {
            Node node = nodes.item(i);
            items[i] = XmlHelper.getElementText(node);
        }
        return items;
    }

}

 

只是一个模板,稍作收藏,以备不时之需!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值