#java #servlets
#java #сервлеты
Вопрос:
Здесь я передаю три параметра этому методу sign. В этой строке
подпись = новая строка(Base64.encodeBase64(mac.doFinal(data.getBytes(UTF_8_Encoding))));
Я получаю сообщение об ошибке:
СЕРЬЕЗНАЯ ПРОБЛЕМА: Servlet.service() для сервлета [com.asp.amz.amzServlet] в контексте с path [/amazon] вызвал исключение [выполнение сервлета вызвало исключение] с основной причиной java.lang.Исключение ClassNotFoundException: org.apache.commons.codec.binary.Base64
String Key = "z/0qfiE ScjxHy2gSwmHqP0rZ6fT9zhVgsNt";
String signatureMethod = "HmacSHA256";
String data = "sandbox.amazon.com/cobranded-ui/actions/start?callerKey=AKIAJZOKEUCXF7RKSCNAamp;callerReference=callerReferenceSingleUseamp;currencyCode=USDamp;paymentReason=HarryPotter 1-5 DVD setamp;pipelineName=SingleUseamp;returnURL=http://localhost:8888/amazonamp;signatureMethod=HmacSHA256amp;signatureVersion=2amp;transactionAmount=5amp;version=2009-01-09";
private static String sign(String data, String key, String signatureMethod) throws SignatureException
{
System.out.println(" In sign block ");
String signature = "";
try {
System.out.println(" In sign Try block ");
Mac mac = Mac.getInstance(signatureMethod);
mac.init(new SecretKeySpec(key.getBytes(), signatureMethod));
signature = new String(Base64.encodeBase64(mac.doFinal(data.getBytes(UTF_8_Encoding))));
System.out.println(" In sign Try block ");
} catch (Exception e) {
System.out.println(" In sign catch block ");
throw new SignatureException("Failed to generate signature: " e.getMessage(), e);
}
System.out.println(" End sign block " signature);
return signature;
}
Комментарии:
1. убедитесь, что в вашем пути к классу есть Base64 .
2. Я надеюсь, что это просто ошибка:
String Key = z/0qfiE ScjxHy2gSwmHqP0rZ6fT9zhVgsNt;
3. @oliholz: Я включил этот файл jar в свой путь сборки
4. Известно ли вам, что вы опубликовали некомпилируемый код? Строковые значения должны заключаться в кавычки.
Ответ №1:
просто добавьте commons-codec.jar в ваш путь к классу
Комментарии:
1. Я включил этот файл jar в свой путь сборки, но снова та же ошибка
2. не в пути сборки, вам нужно сделать доступными во время выполнения. добавьте его в
WEB-INF/lib
3. @Jigar Joshi — Большое вам спасибо за комментарий к WEB-INF / lib.
Ответ №2:
Для этого могут быть две причины:
Первая причина: 1. Сам jar не добавлен в pom.xml . В этом случае добавьте версию зависимости в pom.xml у которого есть класс, для которого вы получаете ошибку
Вторая причина: Когда в проект добавлено несколько jar-файлов, а версия jar, близкая к проекту, не имеет этого класса. Вы можете проверить ближайший jar в вашем проекте, используя команду ниже
mvn dependency:tree -Dverbose -Dincludes=jar-name-casuing-conflict
Как только вы определите версию Jar, в которой есть этот класс. Вы можете решить проблему, добавив этот jar непосредственно в свой проект pom.xml
или вы можете исключить jar, который находится ближе к вашему проекту, который не имеет этого класса и может указывать на другой jar в проекте.
Пример: он исключит jar из проекта «org.cassandraunit», после чего он увидит, что следующий jar, близкий к проекту, будет использоваться в вашем проекте
<dependency>
<groupId>org.cassandraunit</groupId>
<artifactId>cassandra-unit</artifactId>
<version>3.1.3.2</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>