Приветствую всех.
Сразу к делу: Разрабатывается консольное приложение для работы с binance (это криптовалютная биржа, операции на которой можно совершать через api), основная часть уже написана и работает локально на компьютере. Проблема появляется когда приложение компилируется и запускается на линуксовой машине (вебсервер на CentOS8)
Пишется на IntelliJ IDEA Community 2019.3
Обмен данными происходит посредством GET POST запросов через Curl, который реализован на java.net.http.HttpClient
Для отправки некоторых запросов требуется формирование подписи запроса (все передаваемые параметры запроса собираются и шифруются SHA256) и вот тут кроется вся суть моего обращения!
Для формирования подписи используется org.apache.commons.codec.binary.Hex
Данный класс входит в пакет Apache Commons Codec » 1.9 (https://mvnrepository.com/artifact/commons-codec/commons-codec/1.9)
данный пакет подключен как внешняя библиотека и без проблем отрабатывает когда приложение запускается из среды разработки.
Проблема появляется если приложение скомпилировать и запустить на вебсервере. Приложение начинает работать, но когда доходит до формирования подписи для очередного запроса, выводится ошибка и приложение завершает свою работу.
Обращаюсь к специалистам с опытом! Для тех, кто давно работает с Java думаю решить такую проблему не составит труда. Я готов даже оплатить услуги по консультированию конкретного человека, который поможет исправить проблему, расскажет как сделать чтобы такая ошибка не появлялась в будущем.
Сергей
0 уровень
Нужна помощь в устранении ошибки Exception in thread "main" java.lang.NoClassDefFoundError (не бесплатно!)
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2489173
17 февраля 2021, 07:38
Приходить на сайт, где люди УЧАТСЯ джаве и искать человека С ОПЫТОМ это глупо. Хотя чего от биржевых крипточуваков ожидать
Есть же специальные сайты для этого: вокрзилла, яндекс.услуги, авито в конце концов.
0
Justinian Judge в Mega City One Master
17 февраля 2021, 08:14
Здесь хватает людей с опытом, но их непросто заинтересовать.
Подобные вопросы для фриланс бирж лучше всего подходят
0
Anonymous #2489173
17 февраля 2021, 13:10
спасибо что повторили мой тезис
0
Сергей Java Developer в Сбер Expert
14 февраля 2021, 08:52
Проблема тут в том что у веб сервера есть набор библиотек, которые загружаются в classpath программы.
При работе на веб сервере ваша программа в своем classpath имеет две библиотеки Apache Commons Codec с разными версиями. Одна версия из дистрибутива самой программы, другая версия из веб сервера.
Программа загружает сначала библиотеку Apache Commons Codec из веб сервера, а там нет нужного класса, т.к. в другой версии библиотеке этот класс отсутствовал.
Нужно чтобы данная библиотека не загружалась из веб сервера, либо использовать в программе ту же версию библиотеки что и на веб сервере.
Если у вас веб сфера попробуйте выставить опцию
Classes loaded with local class loader first (parent last)
https://www.ibm.com/support/knowledgecenter/SS7K4U_9.0.5/com.ibm.websphere.zseries.doc/ae/trun_classload_server.html
+1
Сергей
15 февраля 2021, 06:49
Сергей, суть проблемы ясна, но вопрос как ее исправить остается открытым.
Если вас не затруднит, напишите пожалуйста на почту 79625968820@yandex.ru ваш телефон или напишите в любой месенджер (viber, whatsapp, telegram) +79625968820 хотелось бы созвониться, голосом проговорить некоторые тонкости, а так-же есть еще несколько вопросов, которые мне пока не ясны, а информацию по ним в интернете я не нашел.
Естественно ваши консультации будут оплачены.
0
Влад Java Developer в Tinkoff
16 февраля 2021, 21:40
Добавьте в свой pom.xml
Вместо fully.qualified.MainClass укажите путь до класса с основным методом main.Например com.example.Example
Далее выполните команду
и вы получите jar с включенными в него дополнениями и запустите его на вашем вебсервере. +1
Сергей
14 февраля 2021, 05:54
Ребята, еще раз повторюсь, конкретному человеку решившему проблему будет оплата налом!
Проблему нужно решить как можно быстрее.
0
Сергей
13 февраля 2021, 13:18
package com.binance.curl;
...
import org.apache.commons.codec.binary.Hex;
public class Request {
...
private static String encode(String data) throws Exception {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(PrivateKey.SECRET_KEY.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
// тут та самая строка at com.binance.curl.Request.encode(Request.java:138)
return new String(Hex.encodeHex(sha256_HMAC.doFinal(data.getBytes("UTF-8"))));
}
}
0
Сергей
13 февраля 2021, 13:16
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Hex
at com.binance.curl.Request.encode(Request.java:138)
at com.binance.curl.Request.prepareData(Request.java:109)
at com.binance.curl.Request.prepareGetData(Request.java:123)
at com.binance.curl.Request.getSigned(Request.java:63)
at com.binance.api.futures.Account.balance(Account.java:118)
at com.binance.client.Test.go(Test.java:46)
at com.binance.client.Main.main(Main.java:42)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.binary.Hex
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 7 more
0
Олег Java developer в EPAM
13 февраля 2021, 12:59
Было бы очень круто посмотреть на StackTrace исключения/ошибки, скрины с ошибкой, логи.
0
Сергей
13 февраля 2021, 13:19
Если подскажите где взять логи, тоже найду и выложу
0