`
crazywen2011
  • 浏览: 40036 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

xFire 下的WebService 客户端接入

    博客分类:
  • Web
阅读更多
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;
    }

}

 

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

 

0
1
分享到:
评论

相关推荐

    Xfire调用webservice无法传递参数问题

    标题“Xfire调用WebService无法传递参数问题”暗示了开发者在尝试使用Xfire框架时遇到了参数无法正常传递到Web服务的情况。这可能涉及到多个方面,如编码问题、序列化错误、类型不匹配或者配置不正确等。以下是一些...

    XFire与Spring集成WebService客户端的两种开发方式.pdf

    在本文中,我们将探讨XFire与Spring框架集成以实现WebService客户端的两种开发方式。XFire是一个流行的Java Web服务实现库,而Spring是一个广泛使用的应用程序框架,可以方便地管理和配置Web服务客户端。 ### 方式...

    xfire客户端生成

    总结,XFire客户端生成是Java开发Web服务客户端的一种高效方式,通过自动化的代码生成,开发者可以快速地接入并调用Web服务,大大减少了手动编写客户端代码的工作量。在实际开发中,结合Spring等框架,可以构建出...

    cxf_axis_xfire客户端调用的几种方法[收集].pdf

    CXF、AXIS2、XFire是三种流行的Java Web服务框架,它们允许开发者创建和消费Web服务。在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会...

    xfire WEBSERVICE

    对于Java开发者来说,JAX-WS提供了编写WEBSERVICE客户端和服务端代码的工具和支持。 6. **SOAP消息处理模型**:包括客户端、服务端、以及可能的中间代理。客户端发起请求,服务端处理请求并返回响应,中间代理可...

    整理xfire和spring的集成 web service 面向服务编程 java

    将XFire的jar包放入项目的类路径,确保在运行时能够找到。 #### 2.3 配置web.xml 在`web.xml`中配置XFireServlet,这将作为Web Service的入口点。添加如下内容: ```xml &lt;servlet-name&gt;XFireServlet ...

    xfire全部jar包

    在开发基于Xfire的应用程序或游戏插件时,开发者通常需要这些jar包来接入Xfire的服务。 **Xfire的核心功能与技术**: 1. **网络通信**:Xfire通过TCP/IP协议进行网络通信,实现用户间的即时消息传递和游戏状态更新...

    webservice文档

    7. 使用XFire客户端工具调用WebService,可以根据已有服务接口创建`XFireProxyFactory`,或者在未知接口的情况下通过WSDL文档动态生成接口。 【XFire配置示例】 - 配置XFireServlet: ```xml &lt;servlet-name&gt;...

    webservice学习笔记 -- XFrie

    由于1.2.6版本不包含xalan项目,需要单独从xml.apache.org下载xalan的二进制包,并将jar文件放入`xfire_service/lib`。 4. **配置服务元数据** 在`src`目录下创建`META-INF`和`xfire`文件夹。在`xfire`文件夹内...

    webservice_简介

    Webservice是一种分布式计算模式下的技术,它为不同的应用程序之间提供了标准化的网络接口,使得这些应用能够通过互联网进行数据交换和互操作。Webservice通常采用HTTP作为传输协议,并使用XML作为数据格式,使得...

    java webservice 创建向导和调用

    将服务类放入Web应用的特定目录(如WEB-INF/classes),并配置`web.xml`文件以启用Servlet容器对Web服务的支持。 5. 创建客户端调用: 使用XFIRE提供的API,如`XFireFactory`和`XFireProxyFactory`,可以创建一个...

Global site tag (gtag.js) - Google Analytics