Java 通过带有ProxyConnector的SOCKS5代理从服务器获取响应时发生NullPointerException
我在基于ApacheMina实现安全xmpp客户端时遇到问题。它应该支持一些功能,如HMAC等。。我任务中的一点是提供使用SOCKS5代理的能力。服务器端已经完成了,我有了不支持代理的工作代码。以下是我实现的构造函数:Java 通过带有ProxyConnector的SOCKS5代理从服务器获取响应时发生NullPointerException,java,proxy,apache-mina,Java,Proxy,Apache Mina,我在基于ApacheMina实现安全xmpp客户端时遇到问题。它应该支持一些功能,如HMAC等。。我任务中的一点是提供使用SOCKS5代理的能力。服务器端已经完成了,我有了不支持代理的工作代码。以下是我实现的构造函数: public class SecureConnector extends AbstractProxyIoHandler { private static final int PORT = PORT; private static final String HOSTNAME = H
public class SecureConnector extends AbstractProxyIoHandler {
private static final int PORT = PORT;
private static final String HOSTNAME = HOSTNAME;
private NioSocketConnector nioConnector;
private ProxyConnector connector;
private volatile int lastStreamID = 0;
private static Object mutex = new Object();
private List<MessageFilter> filters = new ArrayList<MessageFilter>();
private NotificationListener notificationListener;
public SecureConnector(NotificationListener notificationListener, InetSocketAddress proxyAddress) {
this.notificationListener = notificationListener;
nioConnector = new NioSocketConnector();
SocksProxyRequest pr = new SocksProxyRequest(
SocksProxyConstants.SOCKS_VERSION_5,
SocksProxyConstants.ESTABLISH_TCPIP_STREAM,
new InetSocketAddress(HOSTNAME, PORT), "");
ProxyIoSession ps=new ProxyIoSession(proxyAddress, pr);
connector=new ProxyConnector(nioConnector);
connector.setHandler(this);
connector.getFilterChain().addLast("codec", new
connector.getFilterChain().addFirst("sslfilter", getSSLFilter());
connector.setProxyIoSession(ps);}
@Override
public void proxySessionOpened(IoSession session)
{
WriteFuture writeFuture = session.write(IoBuffer.wrap(new byte[]{0xFF}));
}
public ConnectFuture connect() {
return connector.connect();
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
cause.printStackTrace();
session.close(true);
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
if (message instanceof Message) {
Message msg = (Message) message;
if (msg instanceof Close){
session.close(true);
return;
}
}
NotificationListener是一种在服务器发出特殊命令后自动下载新证书的服务,但这不是问题的关键。因此,使用此选项后,我有以下错误:
[NioProcessor-2]ERROR org.apache.mina.proxy.AbstractProxylogicChandler
-无法发送Socks请求:java.lang.NullPointerException
位于org.apache.mina.proxy.handlers.socks.Socks5LogicHandler.encodeAuthenticationPackage(Socks5LogicHandler.java:185)
位于org.apache.mina.proxy.handlers.socks.Socks5LogicHandler.WriterRequest(Socks5LogicHandler.java:282)
位于org.apache.mina.proxy.handlers.socks.Socks5LogicHandler.doHandshake(Socks5LogicHandler.java:86)
位于org.apache.mina.proxy.handlers.socks.Socks5LogicHandler.handleResponse(Socks5LogicHandler.java:433)
位于org.apache.mina.proxy.handlers.socks.Socks5LogicHandler.messageReceived(Socks5LogicHandler.java:318)
在org.apache.mina.proxy.filter.ProxyFilter.messageReceived上(ProxyFilter.java:164)
位于org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
在org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
在org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived上(DefaultIoFilterChain.java:943)
在org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived上(IoFilterAdapter.java:109)
位于org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
在org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived上(DefaultIoFilterChain.java:535)
位于org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:718)
位于org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:672)
位于org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:661)
位于org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
位于org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1130)
位于org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:745)
此错误在打开代理会话后立即发生。有人能帮我解决这个问题吗?我曾写信给ApacheMina支持部门,但没有收到任何答复
SecureConnector connector = new SecureConnector(new NotificationListener(service),proxyAddress);
System.out.println("connector created");
ConnectFuture connectFuture = connector.connect();
connectFuture.await(TIMEOUT);
if (!connectFuture.isConnected()) {
throw new IOException("Couldn't connect to server!");
}
System.out.println("before getting session");
final IoSession session = connectFuture.getSession();
IoSessionConfig sessconf = session.getConfig();
sessconf.setUseReadOperation(true);
System.out.println("session configured");
send(session, IoBuffer.wrap(new byte[]{0xFF}));
System.out.println("byte sent");
recieve(session);
System.out.println("Connected to server.");