forum.bitel.ru
http://forum.bitel.ru/

smpp
http://forum.bitel.ru/viewtopic.php?f=19&t=6468
Страница 1 из 1

Автор:  skyb [ 20 фев 2012, 11:20 ]
Заголовок сообщения:  smpp

Может я что делаю не так? Написал скрипт, при компиляции не ругается, подкинул класс smpp в
Код:
/usr/local/BGBillingServer/lib/ext

и в
Код:
/usr/local/BGBillingServer/lib/app

сам скрипт
Код:
package ru.skyb.scripts.global;

import java.io.IOException;
import java.util.List;
import javax.activation.DataSource;

import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.plugins.dispatch.common.bean.Contact;
import ru.bitel.bgbilling.plugins.dispatch.server.sender.Sender;

import com.logica.smpp.Connection;
import com.logica.smpp.Data;
import com.logica.smpp.TimeoutException;
import com.logica.smpp.WrongSessionStateException;
import com.logica.smpp.pdu.BindRequest;
import com.logica.smpp.pdu.PDUException;
import com.logica.smpp.pdu.Response;
import com.logica.smpp.pdu.SubmitSM;
import com.logica.smpp.pdu.ValueNotSetException;
import com.logica.smpp.pdu.WrongLengthOfStringException;
import com.logica.smpp.TCPIPConnection;
import com.logica.smpp.Session;
import com.logica.smpp.pdu.BindTransmitter;

public class smppSender
   implements Sender
{
   @Override
   public void send( Contact contact1, String string2, String string3, List<DataSource> list4 )
      throws BGException
      {
   Connection conn = new TCPIPConnection("123.123.123.123", 6543);
   Session session = new Session(conn);
   BindRequest breq = new BindTransmitter();
   try {
   breq.setSystemId("MYNAME");
} catch (WrongLengthOfStringException e2) {
   e2.printStackTrace();
}
   try {
   breq.setPassword("my_pswdx");
} catch (WrongLengthOfStringException e) {
   e.printStackTrace();
}
   Response resp = null;
try {
   resp = session.bind(breq);
} catch (ValueNotSetException e) {
   e.printStackTrace();
} catch (TimeoutException e) {
   e.printStackTrace();
} catch (PDUException e) {
   e.printStackTrace();
} catch (WrongSessionStateException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}
   if (resp.getCommandStatus() == Data.ESME_ROK) {
      SubmitSM msg = new SubmitSM();
      try {
      msg.setSourceAddr("3538998765432");
   } catch (WrongLengthOfStringException e1) {
      e1.printStackTrace();
   }
      try {
      msg.setDestAddr("3538619283746");
   } catch (WrongLengthOfStringException e) {
      e.printStackTrace();
   }
      try {
      msg.setShortMessage("Hello, world!");
   } catch (WrongLengthOfStringException e) {
      e.printStackTrace();
   }
      try {
      resp = session.submit(msg);
   } catch (ValueNotSetException e) {
      e.printStackTrace();
   } catch (TimeoutException e) {
      e.printStackTrace();
   } catch (PDUException e) {
      e.printStackTrace();
   } catch (WrongSessionStateException e) {
      e.printStackTrace();
   } catch (IOException e) {
      e.printStackTrace();
   }
      if (resp.getCommandStatus() == Data.ESME_ROK) {
         System.out.println("Message submitted. Status=" + resp.getCommandStatus());
      } else {
         System.out.println("Message submission failed. Status=" + resp.getCommandStatus());
      }
      try {
      session.unbind();
   } catch (ValueNotSetException e) {
      e.printStackTrace();
   } catch (TimeoutException e) {
      e.printStackTrace();
   } catch (PDUException e) {
      e.printStackTrace();
   } catch (WrongSessionStateException e) {
      e.printStackTrace();
   } catch (IOException e) {
      e.printStackTrace();
   }
   } else {
      System.out.println("Couldn't bind. Status=" + resp.getCommandStatus());
   }
       }
   }

когда запускаю, в логах шедулера вылетает такая ошибка

Код:
02-20/06:05:01  INFO [Thread-4] TaskExecuter - Starting periodic task ID: 34 ru.bitel.bgbilling.plugins.dispatch.server.DispatchWorker
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream - Exception in thread "pool-4-thread-36"
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream - java.lang.NoClassDefFoundError: com/logica/smpp/pdu/WrongLengthOfStringException
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.Class.getDeclaredConstructors0(Native Method)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.Class.getConstructor0(Class.java:2699)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.Class.newInstance0(Class.java:326)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.Class.newInstance(Class.java:308)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at ru.bitel.bgbilling.kernel.dynamic.server.DynamicClassManager$UpdatingInvocationHandler.invoke(DynamicClassManager.java:185)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at $Proxy23.send(Unknown Source)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at ru.bitel.bgbilling.plugins.dispatch.server.bean.MessageProcessor.send(MessageProcessor.java:179)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at ru.bitel.bgbilling.plugins.dispatch.server.DispatchWorker.executeTask(DispatchWorker.java:77)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:60)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.Thread.run(Thread.java:662)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream - Caused by: java.lang.ClassNotFoundException: com.logica.smpp.pdu.WrongLengthOfStringException
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at ru.bitel.bgbilling.kernel.dynamic.server.DatabaseClassLoader.findClass(DatabaseClassLoader.java:44)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
02-20/06:05:01 ERROR [pool-4-thread-36] LoggingPrintStream -    ... 13 more

при том что файл с расшрением class com/logica/smpp/pdu/WrongLengthOfStringException есть по этому пути, сервер перезапускал, после того как класс подкидывал.

Автор:  skyb [ 20 фев 2012, 11:31 ]
Заголовок сообщения:  Re: smpp

мдэ, топик офф, нада шедулер было рестартить

Автор:  skyb [ 20 фев 2012, 11:51 ]
Заголовок сообщения:  Re: smpp

02-20/06:56:04 WARN [Finalizer] ConnectionSet - Not recycled before finalize!
вот такое вылетает, это нормально?

Автор:  skyb [ 16 мар 2012, 12:58 ]
Заголовок сообщения:  Re: smpp

А по кодировки не подскажите?
вообщем необходимо передавать все в кодировке UCS-2, как в нее конвертнуть?

Автор:  Amir [ 16 мар 2012, 14:01 ]
Заголовок сообщения:  Re: smpp

Попробуйте UTF-16, вроде бы почти одно и тоже, по крайней мере для латинских и кириллических символов.
Цитата:
02-20/06:56:04 WARN [Finalizer] ConnectionSet - Not recycled before finalize!
вот такое вылетает, это нормально?
А при каких случаях (после чего) обычно вылезает?

Автор:  stark [ 16 мар 2012, 17:14 ]
Заголовок сообщения:  Re: smpp

Я предлагаю заменить все catch-и одним
Код:
 } catch (Exception e) {
      e.printStackTrace();
   }


Это сократит код значительно .

Автор:  stark [ 16 мар 2012, 17:27 ]
Заголовок сообщения:  Re: smpp

skyb писал(а):
А по кодировки не подскажите?
вообщем необходимо передавать все в кодировке UCS-2, как в нее конвертнуть?


Можно попробовать так

Код:
String str = "Привет";
byte encodedBytes[] = str.getBytes( "UTF-16BE" );

Автор:  skyb [ 19 мар 2012, 05:23 ]
Заголовок сообщения:  Re: smpp

Amir писал(а):
Попробуйте UTF-16, вроде бы почти одно и тоже, по крайней мере для латинских и кириллических символов.

Все равно приходят вопросы :(
Amir писал(а):
Цитата:
02-20/06:56:04 WARN [Finalizer] ConnectionSet - Not recycled before finalize!
вот такое вылетает, это нормально?
А при каких случаях (после чего) обычно вылезает?

Да вроде с очередным обновлением поправилось.
stark писал(а):
Я предлагаю заменить все catch-и одним
Код:
 } catch (Exception e) {
      e.printStackTrace();
   }

Это сократит код значительно .

Сделал так.
Код:
package ru.skyb.scripts.global;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.activation.DataSource;

import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.plugins.dispatch.common.bean.Contact;
import ru.bitel.bgbilling.plugins.dispatch.server.sender.Sender;

import com.logica.smpp.Connection;
import com.logica.smpp.Data;
import com.logica.smpp.TimeoutException;
import com.logica.smpp.WrongSessionStateException;
import com.logica.smpp.pdu.BindRequest;
import com.logica.smpp.pdu.PDUException;
import com.logica.smpp.pdu.Response;
import com.logica.smpp.pdu.SubmitSM;
import com.logica.smpp.pdu.ValueNotSetException;
import com.logica.smpp.pdu.WrongLengthOfStringException;
import com.logica.smpp.TCPIPConnection;
import com.logica.smpp.Session;
import com.logica.smpp.pdu.BindTransmitter;

public class smppSender implements Sender {
   @Override
   public void send(Contact contact1, String string2, String string3,
         List<DataSource> list4) throws BGException
         {
      Connection conn = new TCPIPConnection("85.17.220.1", 27715);
      Session session = new Session(conn);
      BindRequest breq = new BindTransmitter();
         breq.setSystemId("televox");
         breq.setPassword("televox");
      Response resp = null;
         resp = session.bind(breq);
      if (resp.getCommandStatus() == Data.ESME_ROK)
      {
         String nymber = contact1.getValue();
         String message = string3;
            byte encodedBytes[] = message.getBytes( "UTF-16" );
         SubmitSM msg = new SubmitSM();
            msg.setSourceAddr((byte) 0, (byte) 5, "Televox");
            msg.setDestAddr((byte) 1, (byte) 1, nymber);
                     msg.setShortMessage(message);
             resp = session.submit(msg);
         if (resp.getCommandStatus() == Data.ESME_ROK) {
            System.out.println("Message submitted. Status="
                  + resp.getCommandStatus());
         } else {
            System.out.println("Message submission failed. Status="
                  + resp.getCommandStatus());
         }
          catch (Exception e) {
               e.printStackTrace();
            }
      }
            else {
         System.out.println("Couldn't bind. Status="
               + resp.getCommandStatus());
            }
      }
   }

Ругается тут
Код:
 catch (Exception e) {
               e.printStackTrace();
            }

вот так
Код:
Эта строка содержит несколько маркеров
   - Синтаксическая ошибка в лексеме "catch"; ожидается for
   - Синтаксическая ошибка; вставьте "; ; ) Statement" для завершения
    ForStatement

Не туда поставил?

stark писал(а):
skyb писал(а):
А по кодировки не подскажите?
вообщем необходимо передавать все в кодировке UCS-2, как в нее конвертнуть?


Можно попробовать так

Код:
String str = "Привет";
byte encodedBytes[] = str.getBytes( "UTF-16BE" );

Так тоже приходят вопросики :(
Может что ещё есть?

Автор:  dimOn [ 19 мар 2012, 11:29 ]
Заголовок сообщения:  Re: smpp

Так может там реально вопросики приходят?

Автор:  dimOn [ 19 мар 2012, 11:31 ]
Заголовок сообщения:  Re: smpp

Что-то я не вижу ни одного использования массива байтов после раскодирования :facepalm:

Автор:  stark [ 19 мар 2012, 12:03 ]
Заголовок сообщения:  Re: smpp

skyb писал(а):
stark писал(а):
Я предлагаю заменить все catch-и одним
Код:
 } catch (Exception e) {
      e.printStackTrace();
   }

Это сократит код значительно .

Сделал так.


Что-то я не понял ..а где try то ???

в смысле я предложил заменить конструкции вида
Код:
try
{
.......
}
catch (ValueNotSetException e) {
   e.printStackTrace();
} catch (TimeoutException e) {
   e.printStackTrace();
} catch (PDUException e) {
   e.printStackTrace();
} catch (WrongSessionStateException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}



На

Код:
try
{
.......
}
catch (Exception e)
{
   e.printStackTrace();
}


Можно заменить все исключения одним универсальны,м если их обработка ни чем не отличается . Общая заглушка .

Автор:  stark [ 19 мар 2012, 12:16 ]
Заголовок сообщения:  Re: smpp

skyb писал(а):
byte encodedBytes[] = message.getBytes( "UTF-16" );
SubmitSM msg = new SubmitSM();
msg.setSourceAddr((byte) 0, (byte) 5, "Televox");
msg.setDestAddr((byte) 1, (byte) 1, nymber);
msg.setShortMessage(message);
resp = session.submit(msg);


Дословное исполнение того что говорят это конечно хорошо :) ..Но я просто общий принцип описал как получить байты в нужной кодировке . А по коду encodedBytes никуда не передается, поэтому ни на что и не влияет. Я не разбирался в этой библиотеке и не знаю, можно ли туда передать байты. Судя по коду, туда передается строка в методе setShortMessage. Возможно сама библотека должна правильно перекодировать или надо как-то по другому делать . Если хотите чтобы мы с этим разобрались и протестили на вашем оборудовании , то пишите в helpdesk.

Автор:  Феанор [ 19 мар 2012, 12:51 ]
Заголовок сообщения:  Re: smpp

честно скажу, с кодировками всегда беда была, но тем не менее...

Код:
message=String(encodedBytes); // создать строку из указанного массива байт

вот сюда вставить:
Код:
byte encodedBytes[] = message.getBytes( "UTF-16" );
message=String(encodedBytes); // создать строку из указанного массива байт
SubmitSM msg = new SubmitSM();

Автор:  stark [ 19 мар 2012, 15:55 ]
Заголовок сообщения:  Re: smpp

Феанор писал(а):
честно скажу, с кодировками всегда беда была, но тем не менее...

Код:
message=String(encodedBytes); // создать строку из указанного массива байт

вот сюда вставить:
Код:
byte encodedBytes[] = message.getBytes( "UTF-16" );
message=String(encodedBytes); // создать строку из указанного массива байт
SubmitSM msg = new SubmitSM();

Это не поможет.

Надо попробовать сделать:
Код:
msg.setShortMessage(message, "UTF-16BE" );

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/