⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmppchannel.java

📁 Xfire文件 用于开发web service 的一个开源工具 很好用的
💻 JAVA
字号:
package org.codehaus.xfire.xmpp;import java.io.ByteArrayOutputStream;import javax.xml.stream.XMLStreamWriter;import org.codehaus.xfire.MessageContext;import org.codehaus.xfire.XFireException;import org.codehaus.xfire.XFireRuntimeException;import org.codehaus.xfire.exchange.InMessage;import org.codehaus.xfire.exchange.OutMessage;import org.codehaus.xfire.fault.XFireFault;import org.codehaus.xfire.soap.SoapSerializer;import org.codehaus.xfire.transport.AbstractChannel;import org.codehaus.xfire.transport.Channel;import org.codehaus.xfire.util.STAXUtils;import org.jivesoftware.smack.XMPPConnection;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smack.filter.ToContainsFilter;import org.jivesoftware.smack.packet.IQ;import org.jivesoftware.smack.packet.XMPPError;public class XMPPChannel    extends AbstractChannel{    private XMPPConnection conn;    private String currentId; // hack to allow synchronous single threaded calls via the Client        public XMPPChannel(String uri, XMPPTransport transport)    {        setUri(uri);        setTransport(transport);    }    public void open() throws XFireException    {        if (conn != null)            return;                XMPPTransport transport = (XMPPTransport) getTransport();                try        {            conn = new XMPPConnection(transport.getServer());            conn.login(transport.getUsername(), transport.getPassword(), getUri());            conn.addPacketListener(new ChannelPacketListener(transport.getXFire(), this),                                   new ToContainsFilter(transport.getUsername()));        }        catch (XMPPException e)        {            throw new XFireException("Couldn't open channel.", e);        }    }    public void send(MessageContext context, OutMessage message)        throws XFireFault    {        XMPPTransport transport = (XMPPTransport) getTransport();        ByteArrayOutputStream out = new ByteArrayOutputStream();        try        {            context.setProperty(SoapSerializer.SERIALIZE_PROLOG, Boolean.FALSE);            final XMLStreamWriter writer = STAXUtils.createXMLStreamWriter(out, message.getEncoding(),context);                        message.getSerializer().writeMessage(message, writer, context);                        writer.flush();            writer.close();                        out.flush();            out.close();        }        catch (Exception e)        {            throw new XFireRuntimeException("Couldn't write stream.", e);        }        currentId = context.getId();                SoapEnvelopePacket response = new SoapEnvelopePacket(out.toString());         response.setFrom(conn.getUser());                if (message.getUri().equals(Channel.BACKCHANNEL_URI))        {            SoapEnvelopePacket req =                     (SoapEnvelopePacket) context.getProperty(ChannelPacketListener.PACKET);            response.setTo(req.getFrom());            response.setType(IQ.Type.RESULT);            response.setPacketID(req.getPacketID());        }        else        {            response.setTo(message.getUri());        }                XMPPError error = (XMPPError) context.getProperty(XMPPFaultHandler.XMPP_ERROR);        if (error != null)            response.setError(error);        conn.sendPacket(response);    }    public void receive(MessageContext context, InMessage message)    {        context.setId(currentId);                super.receive(context, message);    }    public void close()    {        if (conn != null)            conn.close();                super.close();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -