In a small java program run from the CentOS terminal, I am getting a java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
error when I type in java -cp .:"../dependencies/*" mainpackage.SendText xxxxxxxxxx HelloThere
at the CentOS 7 terminal. How can I resolve this error so that the program can run successfully from the command line?
The terminal input and output is as follows:
[user@domain bin]$ java -cp .:"../dependencies/*" mainpackage.SendText xxxxxxxxxx HelloThere
Exception in thread "main" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175)
at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158)
at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448)
at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:151)
at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:110)
at mainpackage.SendText.main(SendText.java:20)
Where xxxxxxxxxx
and HelloThere
are arguments to the program, as shown below.
Note that the directory structure of the code is:
/home/user/javacode #contains SendText.java
/home/user/javacode/bin/mainpackage/ #contains SendText.class
/home/user/javacode/dependencies #contains jar files
I read this other posting stating that the problem is caused by redundant versions of httpcore
in the classpath
, so I moved to the parent directory and did a recursive search for all files with httpcore
in their name, but got the following results, which seem to show only one version of httpcore
:
[user@domain bin]$ cd /home/user/javacode/
[user@domain javacode]$ find . -name "*http*"
./dependencies/httpcore-4.1.2.jar
./dependencies/httpclient-4.2.3.jar
./dependencies/httpclient-4.2.3.jar.sha1
./dependencies/httpclient-4.2.3.pom
./dependencies/httpclient-4.2.3.pom.sha1
./dependencies/httpclient-4.1.2.jar
[user@domain javacode]$
The line of code throwing the error is: TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);
, and the complete code of the small program is:
package mainpackage;
import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.MessageFactory;
import com.twilio.sdk.resource.instance.Message;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import java.util.ArrayList;
import java.util.List;
public class SendText {
public static final String ACCOUNT_SID = "arealsid";
public static final String AUTH_TOKEN = "arealtoken";
public static void main(String[] args) throws TwilioRestException {
TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);
String to = args[0];
String body = args[1];
// Build a filter for the MessageList
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("Body", body));
params.add(new BasicNameValuePair("To", to));
params.add(new BasicNameValuePair("From", "+11234567654"));
MessageFactory messageFactory = client.getAccount().getMessageFactory();
Message message = messageFactory.create(params);
System.out.println(message.getSid());
}
}
The full contents of the /dependencies
folder are:
[user@domain bin]$ cd /home/user/javacode/dependencies
[user@domain dependencies]$ ls -al
total 39464
drwxrwxr-x 5 user user 8192 Aug 24 19:18 .
drwxrwxr-x 4 user user 76 Aug 21 22:29 ..
drwxrwxr-x 2 user user 6 Aug 22 05:05 1.2
drwxr-xr-x 2 user user 6 Aug 22 03:00 3.4.5
drwxr-xr-x 2 user user 6 Aug 22 03:01 4.2.3
-rw-r--r-- 1 user user 445288 Aug 24 19:17 antlr-2.7.7.jar
-rw-r--r-- 1 user user 4467 Aug 24 19:17 aopalliance-1.0.jar
-rw-r--r-- 1 user user 119683 Aug 24 19:17 aspectjrt-1.7.4.jar
-rw-r--r-- 1 user user 1850391 Aug 24 19:17 aspectjweaver-1.7.4.jar
-rw-r--r-- 1 user user 255692 Aug 24 19:17 bcpg-jdk15on-1.51.jar
-rw-r--r-- 1 user user 2842667 Aug 24 19:17 bcprov-jdk15on-1.51.jar
-rw-r--r-- 1 user user 140580 Aug 24 19:17 bootstrap-2.3.0.jar
-rw-r--r-- 1 user user 156396 Aug 24 19:17 common-2.2.3.jar
-rw-r--r-- 1 user user 232019 Aug 24 19:17 commons-beanutils-1.8.3.jar
-rw-r--r-- 1 user user 58160 Aug 24 19:17 commons-codec-1.4.jar
-rw-r--r-- 1 user user 146108 Aug 24 19:17 commons-digester-1.8.1.jar
-rw-r--r-- 1 user user 53082 Aug 24 19:17 commons-fileupload-1.2.jar
-rw-r--r-- 1 user user 87776 Aug 24 19:17 commons-io-1.3.2.jar
-rw-r--r-- 1 user user 284220 Aug 24 19:17 commons-lang-2.6.jar
-rw-r--r-- 1 user user 385091 Aug 24 19:17 commons-lang3-3.2.1.jar
-rw-r--r-- 1 user user 60686 Aug 24 19:17 commons-logging-1.1.1.jar
-rw-r--r-- 1 user user 61829 Aug 22 05:01 commons-logging-1.2.jar
-rw-r--r-- 1 user user 40 Aug 22 05:01 commons-logging-1.2.jar.sha1
-rw-rw-r-- 1 user user 19206 Aug 22 05:01 commons-logging-1.2.pom
-rw-rw-r-- 1 user user 40 Aug 22 05:01 commons-logging-1.2.pom.sha1
-rw-r--r-- 1 user user 390116 Aug 24 19:17 datatables-core-0.9.2.jar
-rw-r--r-- 1 user user 5295 Aug 24 19:17 datatables-export-itext-0.9.2.jar
-rw-r--r-- 1 user user 42220 Aug 24 19:17 datatables-jsp-0.9.2.jar
-rw-r--r-- 1 user user 6484 Aug 24 19:17 datatables-servlet2-0.9.2.jar
-rw-r--r-- 1 user user 313898 Aug 24 19:17 dom4j-1.6.1.jar
-rw-r--r-- 1 user user 750664 Aug 24 19:17 ecore-2.2.3.jar
-rw-r--r-- 1 user user 1346296 Aug 24 19:17 ehcache-core-2.6.6.jar
-rw-r--r-- 1 user user 81271 Aug 24 19:17 hibernate-commons-annotations-4.0.1.Final.jar
-rw-r--r-- 1 user user 4613189 Aug 24 19:17 hibernate-core-4.2.1.Final.jar
-rw-r--r-- 1 user user 138093 Aug 24 19:17 hibernate-ehcache-4.2.1.Final.jar
-rw-r--r-- 1 user user 484520 Aug 24 19:17 hibernate-entitymanager-4.2.1.Final.jar
-rw-r--r-- 1 user user 102661 Aug 24 19:17 hibernate-jpa-2.0-api-1.0.1.Final.jar
-rw-r--r-- 1 user user 477382 Aug 24 19:17 hibernate-validator-4.3.1.Final.jar
-rw-r--r-- 1 user user 352254 Aug 24 19:17 httpclient-4.1.2.jar
-rw-r--r-- 1 user user 433071 Aug 22 02:36 httpclient-4.2.3.jar
-rw-r--r-- 1 user user 40 Aug 22 02:36 httpclient-4.2.3.jar.sha1
-rw-r--r-- 1 user user 5911 Aug 22 02:36 httpclient-4.2.3.pom
-rw-r--r-- 1 user user 40 Aug 22 02:36 httpclient-4.2.3.pom.sha1
-rw-r--r-- 1 user user 181200 Aug 24 19:18 httpcore-4.1.2.jar
-rw-r--r-- 1 user user 38139 Aug 24 19:18 hyperjaxb3-ejb-runtime-0.6.0.jar
-rw-r--r-- 1 user user 1810034 Aug 24 19:18 itextpdf-5.3.4.jar
-rw-r--r-- 1 user user 228268 Aug 24 19:18 jackson-core-asl-1.9.3.jar
-rw-r--r-- 1 user user 773019 Aug 24 19:18 jackson-mapper-asl-1.9.3.jar
-rw-r--r-- 1 user user 648253 Aug 24 19:18 javassist-3.15.0-GA.jar
-rw-r--r-- 1 user user 582024 Aug 24 19:18 javax.mail.jar
-rw-r--r-- 1 user user 141164 Aug 24 19:18 jaxb2-basics-runtime-0.8.2.jar
-rw-r--r-- 1 user user 60768 Aug 24 19:18 jboss-logging-3.1.0.GA.jar
-rw-r--r-- 1 user user 25215 Aug 24 19:18 jboss-transaction-api_1.1_spec-1.0.1.Final.jar
-rw-r--r-- 1 user user 16458 Aug 24 19:18 jcl-over-slf4j-1.7.1.jar
-rw-r--r-- 1 user user 153253 Aug 24 19:18 jdom-1.0.jar
-rw-r--r-- 1 user user 581571 Aug 24 19:18 joda-time-2.3.jar
-rw-r--r-- 1 user user 29691 Aug 24 19:18 joda-time-hibernate-1.3.jar
-rw-r--r-- 1 user user 34417 Aug 24 19:18 joda-time-jsptags-1.1.1.jar
-rw-r--r-- 1 user user 155031 Aug 24 19:18 jquery-2.0.3-1.jar
-rw-r--r-- 1 user user 618763 Aug 24 19:18 jquery-ui-1.10.3.jar
-rw-r--r-- 1 user user 23931 Aug 24 19:18 json-simple-1.1.1.jar
-rw-r--r-- 1 user user 16046 Aug 24 19:18 json-simple-1.1.jar
-rw-r--r-- 1 user user 414240 Aug 24 19:18 jstl-1.2.jar
-rw-r--r-- 1 user user 264600 Aug 24 19:18 logback-classic-1.0.13.jar
-rw-r--r-- 1 user user 418870 Aug 24 19:18 logback-core-1.0.13.jar
-rw-r--r-- 1 user user 98 Aug 22 02:31 m2e-lastUpdated.properties
-rw-r--r-- 1 user user 872300 Aug 24 19:18 mysql-connector-java-5.1.27.jar
-rw-rw-r-- 1 user user 199 Aug 22 05:01 _remote.repositories
-rw-r--r-- 1 user user 219683 Aug 24 19:18 rome-1.0.jar
-rw-r--r-- 1 user user 26084 Aug 24 19:18 slf4j-api-1.7.5.jar
-rw-r--r-- 1 user user 335679 Aug 24 19:18 spring-aop-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 359456 Aug 24 19:18 spring-aop-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 610657 Aug 24 19:18 spring-beans-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 712395 Aug 24 19:18 spring-beans-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 865109 Aug 24 19:18 spring-context-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 1026661 Aug 24 19:18 spring-context-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 127744 Aug 24 19:18 spring-context-support-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 178151 Aug 24 19:18 spring-context-support-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 870616 Aug 24 19:18 spring-core-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 1008584 Aug 24 19:18 spring-core-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 382147 Aug 24 19:18 spring-data-commons-1.6.2.RELEASE.jar
-rw-r--r-- 1 user user 161900 Aug 24 19:18 spring-data-jpa-1.4.2.RELEASE.jar
-rw-r--r-- 1 user user 196929 Aug 24 19:18 spring-expression-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 259197 Aug 24 19:18 spring-expression-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 405160 Aug 24 19:18 spring-jdbc-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 426716 Aug 24 19:18 spring-jdbc-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 205995 Aug 24 19:18 spring-jms-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 269447 Aug 24 19:18 spring-jms-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 285829 Aug 24 19:18 spring-messaging-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 385012 Aug 24 19:18 spring-orm-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 376254 Aug 24 19:18 spring-orm-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 74705 Aug 24 19:18 spring-oxm-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 82949 Aug 24 19:18 spring-oxm-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 83411 Aug 24 19:18 spring-security-acl-3.2.2.RELEASE.jar
-rw-r--r-- 1 user user 406230 Aug 24 19:18 spring-security-config-3.2.2.RELEASE.jar
-rw-r--r-- 1 user user 359632 Aug 24 19:18 spring-security-core-3.2.2.RELEASE.jar
-rw-r--r-- 1 user user 24511 Aug 24 19:18 spring-security-taglibs-3.2.2.RELEASE.jar
-rw-r--r-- 1 user user 342221 Aug 24 19:18 spring-security-web-3.2.2.RELEASE.jar
-rw-r--r-- 1 user user 242189 Aug 24 19:18 spring-tx-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 252964 Aug 24 19:18 spring-tx-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 627339 Aug 24 19:18 spring-web-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 722215 Aug 24 19:18 spring-web-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 637193 Aug 24 19:18 spring-webmvc-3.2.5.RELEASE.jar
-rw-r--r-- 1 user user 782723 Aug 24 19:18 spring-webmvc-4.1.7.RELEASE.jar
-rw-r--r-- 1 user user 26664 Aug 24 19:18 tiles-api-2.1.3.jar
-rw-r--r-- 1 user user 135193 Aug 24 19:18 tiles-core-2.1.3.jar
-rw-r--r-- 1 user user 55083 Aug 24 19:18 tiles-jsp-2.1.3.jar
-rw-r--r-- 1 user user 53036 Aug 24 19:18 tiles-servlet-2.1.3.jar
-rw-r--r-- 1 user user 124006 Aug 24 19:18 tomcat-jdbc-7.0.42.jar
-rw-r--r-- 1 user user 38333 Aug 24 19:18 tomcat-juli-7.0.42.jar
-rw-r--r-- 1 user user 165092 Aug 24 19:18 twilio-java-sdk-3.4.5.jar
-rw-r--r-- 1 user user 40 Aug 22 02:31 twilio-java-sdk-3.4.5.jar.sha1
-rw-r--r-- 1 user user 5113 Aug 22 02:31 twilio-java-sdk-3.4.5.pom
-rw-r--r-- 1 user user 40 Aug 22 02:31 twilio-java-sdk-3.4.5.pom.sha1
-rw-r--r-- 1 user user 129098 Aug 22 02:31 twilio-java-sdk-3.4.5-sources.jar
-rw-r--r-- 1 user user 40 Aug 22 02:31 twilio-java-sdk-3.4.5-sources.jar.sha1
-rw-r--r-- 1 user user 134530 Aug 24 19:18 usertype.core-3.1.0.CR8.jar
-rw-r--r-- 1 user user 53688 Aug 24 19:18 usertype.spi-3.1.0.CR8.jar
-rw-r--r-- 1 user user 47433 Aug 24 19:18 validation-api-1.0.0.GA.jar
I then checked to see if the contents of the folders in the above ls -al
of the dependencies had any contents, but got the following results, which seem to indicate that they are empty:
[user@domain dependencies]$ cd /home/user/javacode/dependencies/1.2/
[user@domain 1.2]$ ls -al
total 12
drwxrwxr-x 2 user user 6 Aug 22 05:05 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 1.2]$ cd /home/user/javacode/dependencies/3.4.5/
[user@domain 3.4.5]$ ls -al
total 12
drwxr-xr-x 2 user user 6 Aug 22 03:00 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 3.4.5]$ cd /home/user/javacode/dependencies/4.2.3/
[user@domain 4.2.3]$ ls -al
total 12
drwxr-xr-x 2 user user 6 Aug 22 03:01 .
drwxrwxr-x 5 user user 8192 Aug 24 19:18 ..
[user@domain 4.2.3]$
So how do I resolve this error and get this program to run successfully from the command line?
ANSWER:
The solution was to navigate the terminal to the dependencies
directory and then to type the following four commands before trying to run the java code from the command line again:
rm httpclient-4.2.3.pom
rm httpclient-4.2.3.pom.sha1
rm httpclient-4.2.3.jar
rm httpclient-4.2.3.jar.sha1
A user hinted at a guess in this general direction below, so I am marking it as the accepted answer. But the actual solution was the four lines of rm commands, which eliminated the redundant httpclient
libraries.
If you get a NoSuchFieldError
at runtime, the most likely explanation is that a different version of at least one class is presented at run time than was presented at compile time, and a class you are trying to use references a field of the compile-time version of that changed class that is not present in the runtime version of the same class.
It is difficult to judge exactly where the incompatibility lies, but my first guess would be incompatible versions of httpclient and httpcore. Note that although you have only one version of the latter, you have two versions of the former. I suppose it's most likely that the httpclient and httpcore with exactly matching version numbers are the ones intended to work together.