在本文中,我们将详细介绍java.lang.NoSuchMethodError:JavaEE应用程序中的org.apache.commons.codec.binary.Base64.encodeBas
在本文中,我们将详细介绍java.lang.NoSuchMethodError:Java EE应用程序中的org.apache.commons.codec.binary.Base64.encodeBase64String的各个方面,并为您提供关于的相关解答,同时,我们也将为您带来关于Android studio java.lang.NoSuchMethodError: 没有静态方法 encodeBase64URLSafeString([B)Ljava/lang/String;、android – NoSuchMethodError:java.lang.Long.hashCode、Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty、Base64 Apache Commons Codec作法的有用知识。
本文目录一览:- java.lang.NoSuchMethodError:Java EE应用程序中的org.apache.commons.codec.binary.Base64.encodeBase64String()
- Android studio java.lang.NoSuchMethodError: 没有静态方法 encodeBase64URLSafeString([B)Ljava/lang/String;
- android – NoSuchMethodError:java.lang.Long.hashCode
- Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty
- Base64 Apache Commons Codec作法
java.lang.NoSuchMethodError:Java EE应用程序中的org.apache.commons.codec.binary.Base64.encodeBase64String()
我正在开发需要Base64编码/解码的Java EE应用程序
所以我commons-codec-1.5.jar
在WEB-INF/lib
应用程序的文件夹中添加并使用了
import org.apache.commons.codec.binary.Base64;
在Java文件中。
在编译期间,当我输入时Base64
,它表明encodeBase64String
method可用。但是在运行时,它将引发如下异常:
java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String
我在构建路径中有JAR,但我仍然不明白为什么它会引发上述错误。
答案1
小编典典该方法在Commons Codec
1.4中引入。此异常表示您在Web应用程序的运行时类路径中的其他位置具有Commons
Codec的较旧版本,该版本在类加载中具有优先权。检查webapp运行时类路径覆盖的所有路径。这包括除其他外Webapp/WEB-INF/lib
,YourAppServer/lib
,JRE/lib
和JRE/lib/ext
。最后删除或升级有问题的旧版本。
更新 :根据评论,您似乎无法找到它。我只能建议使用该较新的方法对代码进行注释,然后将以下行放在适当的位置:
System.out.println(Base64.class.getProtectionDomain().getCodeSource().getLocation());
那应该打印到运行时从中加载JAR文件的绝对路径。
更新2
:这似乎指向正确的文件。抱歉,我现在无法解释您的问题。我所建议的只是使用其他Base64
类似的方法encodeBase64(byte[])
,然后newString(bytes)
自己构建一个。或者,您可以删除该库并使用其他Base64编码器,例如this。
Android studio java.lang.NoSuchMethodError: 没有静态方法 encodeBase64URLSafeString([B)Ljava/lang/String;
如何解决Android studio java.lang.NoSuchMethodError: 没有静态方法 encodeBase64URLSafeString([B)Ljava/lang/String;?
我正在尝试使用 Upbit API 调用我的钱包信息。
示例代码来自https://docs.upbit.com/reference#%EC%9E%90%EC%82%B0-%EC%A1%B0%ED%9A%8C
这是我的代码。
(删除了我的 API 访问密钥和秘密密钥)
package gachon.mpclass.apitest2;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.util.UUID;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import android.util.Base64;
import org.apache.http.httpentity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NetworkThread thread = new NetworkThread();
thread.start();
}
class NetworkThread extends Thread {
public void run() {
try {
String accessKey = ("api key value");
String secretKey = ("api key value");
String serverUrl = ("https://api.upbit.com");
Algorithm algorithm = Algorithm.HMAC256(secretKey);
String jwtToken = JWT.create()
.withClaim("access_key",accessKey)
.withClaim("nonce",UUID.randomUUID().toString())
.sign(algorithm);
String authenticationToken = "Bearer " + jwtToken;
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(serverUrl + "/v1/accounts");
request.setHeader("Content-Type","application/json");
request.addHeader("Authorization",authenticationToken);
HttpResponse response = client.execute(request);
httpentity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity,"UTF-8"));
} catch (IOException e) {
e.printstacktrace();
}
}
}
}
SDK 版本为 30 和依赖项是
dependencies {
implementation ''androidx.appcompat:appcompat:1.2.0''
implementation ''com.google.android.material:material:1.3.0''
implementation ''androidx.constraintlayout:constraintlayout:2.0.4''
implementation filetree(dir: ''C:\\Users\\admin\\AndroidStudioProjects\\APITest2\\app\\libs'',include: [''*.aar'',''*.jar''],exclude: [])
testImplementation ''junit:junit:4.+''
androidTestImplementation ''androidx.test.ext:junit:1.1.2''
androidTestImplementation ''androidx.test.espresso:espresso-core:3.3.0''
compileOnly ''org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2''
implementation group: ''org.apache.httpcomponents'',name: ''httpclient-android'',version: ''4.3.5''
implementation ''com.fasterxml.jackson.core:jackson-databind:2.3.2''
implementation group: ''commons-codec'',name: ''commons-codec'',version: ''1.10''
implementation ''com.auth0.android:jwtdecode:2.0.0''
api ''io.jsonwebtoken:jjwt-api:0.11.2''
runtimeOnly ''io.jsonwebtoken:jjwt-impl:0.11.2''
runtimeOnly(''io.jsonwebtoken:jjwt-orgjson:0.11.2'') { exclude group: ''org.json'',module: ''json''}
runtimeOnly ''org.bouncycastle:bcprov-jdk15on:1.60''
implementation ''com.android.support:multidex:1.0.3''
}
错误是
E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: gachon.mpclass.apitest2,PID: 21107
java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of ''org.apache.commons.codec.binary.Base64'' appears in /system/framework/org.apache.http.legacy.jar)
at com.auth0.jwt.JWTCreator.sign(JWTCreator.java:283)
at com.auth0.jwt.JWTCreator.access$100(JWTCreator.java:23)
at com.auth0.jwt.JWTCreator$Builder.sign(JWTCreator.java:264)
at gachon.mpclass.apitest2.MainActivity$NetworkThread.run(MainActivity.java:48)
我尝试了很多库和依赖项,但仍然出现相同的错误。 我应该更改整个代码还是有任何工作依赖项?
解决方法
这个错误通常发生在类路径上的 jar 版本错误时,在这种情况下,可能是应用程序正在寻找后续 jar /system/framework/org.apache.http.legacy.jar
中的 Base64 类。看看这个提交
https://github.com/auth0/java-jwt/commit/7dea6ac54d5b5b8822a9f3ee41cc4666e250cc27#diff-66fdd511fc2a34e115ac3e635c97eb82b89c8b64e26ea09247712b9efa5e62f7
查看 auth0.jwt 项目,您可以看到在 JWTCreator.sign() 方法中调用 Base64.encodeBase64URLSafeString(byte []) 方法的位置,可能会抛出错误,因为类路径上的 Base64 类版本确实如此不包含该功能。 如果您发布整个 build.gradle 文件会很有帮助。
android – NoSuchMethodError:java.lang.Long.hashCode
var _id = Random().nextLong() override fun getId() = _id // AbstractORM class implements an interface that defines this method getId() override fun hashCode() = getId().hashCode()
突然开始抛出以下异常:
FATAL EXCEPTION: main java.lang.NoSuchMethodError: java.lang.Long.hashCode at com.company.ormlite.AbstractORM.hashCode(AbstractORM.kt:271) at java.util.HashMap.put(HashMap.java:390) at java.util.HashSet.add(HashSet.java:95) at kotlin.collections.ArraysKt___ArraysKt.toCollection(_Arrays.kt:6518) at kotlin.collections.ArraysKt___ArraysKt.toSet(_Arrays.kt:6853) at kotlin.collections.SetsKt__SetsKt.setof(Sets.kt:32) at com.company.android.tna.orm.DataManager.getTables(DataManager.kt:16) at com.company.android.tna.orm.DataManager.getTables(DataManager.kt:10) at com.company.android.core.utils.AbstractDataManager.create(AbstractDataManager.kt:25) at com.company.android.core.utils.AbstractDataManager.start(AbstractDataManager.kt:44) at com.company.android.core.utils.AbstractZKApplication.onCreate(AbstractZKApplication.kt:54) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4151) at android.app.ActivityThread.access$1300(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)
这让我傻眼了几个原因:
> Java和Kotlin中的所有类都有hashCode方法,因为它继承自Object或Any.
>如何找不到Android SDK本身的方法?如果SDK不存在,它是如何运行的?
>在IntelliJ IDEA中检查该行代码时,它会将我发送到kotlin.Any.hashCode,而不是java.lang.Long.hashcode.
任何见解都将非常感谢,提前感谢.
解决方法
getId().hashCode()
Kotlin 1.1.2生成以下代码:
Long.valueOf(this.getId()).hashCode()
而较新版本的Kotlin会生成其他代码:
Long.hashCode(this.getId())
问题是Android中的这个静态方法Long.hashCode(long)仅在API 24(Android 7.0)之后可用,而我正在测试具有版本4.1(API 16)的Android设备.
我正在通过手动计算哈希码来暂时修复,尽管我已经打开了一个问题here.
override fun hashCode() = (getId() xor getId().ushr(32)).toInt()
如issue所述,切换到Kotlin编译器的Java 1.6目标会生成旧的兼容代码.
PS:我不是100%肯定那些Kotlin版本,请带上一粒盐.
Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty
java.lang.NoSuchMethodError:java.lang.String.isEmpty
我从Scala调用text.isEmpty.任何想法,如何解决这个问题?
解决方法
Base64 Apache Commons Codec作法
final Base64 base64 = new Base64();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = base64.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(base64.decode(encodedText), "UTF-8"));
final Base64 base64 = new Base64();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = base64.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(base64.decode(encodedText), "UTF-8"));
今天的关于java.lang.NoSuchMethodError:Java EE应用程序中的org.apache.commons.codec.binary.Base64.encodeBase64String和的分享已经结束,谢谢您的关注,如果想了解更多关于Android studio java.lang.NoSuchMethodError: 没有静态方法 encodeBase64URLSafeString([B)Ljava/lang/String;、android – NoSuchMethodError:java.lang.Long.hashCode、Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty、Base64 Apache Commons Codec作法的相关知识,请在本站进行查询。
本文标签: