Ответ 1
просто добавьте commons-codec.jar в свой путь к классам
Здесь я передаю три параметра этому методу подписи. В этой строке
signature = new String(Base64.encodeBase64(mac.doFinal(data.getBytes(UTF_8_Encoding))));
Я получаю сообщение об ошибке:
SEVERE: Servlet.service() для сервлета [com.asp.amz.amzServlet] в контексте с пути [/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=AKIAJZOKEUCXF7RKSCNA&callerReference=callerReferenceSingleUse¤cyCode=USD&paymentReason=HarryPotter%201-5%20DVD%20set&pipelineName=SingleUse&returnURL=http%3A%2F%2Flocalhost%3A8888%2Famazon&signatureMethod=HmacSHA256&signatureVersion=2&transactionAmount=5&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;
}
просто добавьте commons-codec.jar в свой путь к классам
Получить commons-codec.jar
из Apache HTTP Components
Для этого может быть две причины:
Первая причина: 1. Сама банка не добавляется в pom.xml. В этом случае добавьте версию зависимости в файл pom.xml, в котором есть класс, для которого вы получаете ошибку
Вторая причина: Если в проект добавлено несколько jar файлов, а версия jar, находящаяся рядом с проектом, не имеет этого класса. Вы можете проверить ближайшую банку в своем проекте ниже команды
mvn dependency:tree -Dverbose -Dincludes=jar-name-casuing-conflict
Как только вы определите версию Jar, которая имеет этот класс. Вы можете решить, добавив этот jar непосредственно в ваш проект pom.xml
или Вы можете исключить банку, расположенную ближе к вашему проекту, которая не имеет этого класса и может указывать на другую банку в проекте.
Пример: он исключит банку в проекте "org.cassandraunit", затем он увидит ближайшую следующую банку, которая будет близка к проекту, будет использоваться в вашем проекте
<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>