5

I am developing a Java EE web application.

here is my pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>bitcoin</groupId> <artifactId>bitcoin</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>Chens Bitcoin Webapp</name> <url>http://maven.apache.org</url> <properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- Define the version of the JBoss BOMs we want to import to specify tested stacks. --> <version.jboss.bom>1.0.5.CR6</version.jboss.bom> </properties> <repositories> <repository> <id>prime-repo</id> <name>Prime Repo</name> <url>http://repository.primefaces.org</url> </repository> </repositories> <dependencyManagement> <dependencies> <!-- Define the version of JBoss' Java EE 6 APIs we want to use --> <!-- JBoss distributes a complete set of Java EE 6 APIs including a Bill of Materials (BOM). A BOM specifies the versions of a "stack" (or a collection) of artifacts. We use this here so that we always get the correct versions of artifacts. Here we use the jboss-javaee-6.0-with-security stack (you can read this as the JBoss stack of the Java EE 6 APIs with Security). You can actually use this stack with any version of JBoss AS that implements Java EE 6, not just JBoss AS 7! --> <dependency> <groupId>org.jboss.bom</groupId> <artifactId>jboss-javaee-6.0-with-security</artifactId> <version>${version.jboss.bom}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 

 <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <!--<dependency>--> <!--<groupId>org.jboss.spec.javax.faces</groupId>--> <!--<artifactId>jboss-jsf-api_2.2_spec</artifactId>--> <!--<version>2.2.0</version>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>com.sun.faces</groupId>--> <!--<artifactId>jsf-spi</artifactId>--> <!--<version>1.0</version>--> <!--</dependency>--> <!-- Rewrite --> <dependency> <groupId>org.ocpsoft.rewrite</groupId> <artifactId>rewrite-servlet</artifactId> <version>2.0.8.Final</version> </dependency> <dependency> <groupId>org.ocpsoft.rewrite</groupId> <artifactId>rewrite-config-prettyfaces</artifactId> <version>2.0.8.Final</version> </dependency> <dependency> <groupId>org.omnifaces</groupId> <artifactId>omnifaces</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>3.5</version> </dependency> <!-- Data time management --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.1</version> </dependency> <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> <!-- Import the PicketLink API, we deploy this as library with the application, and can compile against it --> <dependency> <groupId>org.picketlink</groupId> <artifactId>picketlink-core-api</artifactId> </dependency> <!-- Import the PicketLink implementation, we deploy this as library with the application, but can't compile against it --> <dependency> <groupId>org.picketlink</groupId> <artifactId>picketlink-core-impl</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>bitcoin</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <compilerArguments> <endorseddirs>${endorsed.dir}</endorseddirs> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.jboss.as.plugins</groupId> <artifactId>jboss-as-maven-plugin</artifactId> <version>7.4.Final</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.6</version> <executions> <execution> <phase>validate</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputDirectory>${endorsed.dir}</outputDirectory> <silent>true</silent> <artifactItems> <artifactItem> <groupId>javax</groupId> <artifactId>javaee-endorsed-api</artifactId> <version>7.0</version> <type>jar</type> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> 

I have a method to create HttpClient, it works fine alone, but having problem when calling from jsf page:

 public void doSth() { ...... HttpClient httpclient = HttpClientBuilder.create().build(); ...... } 

this method is invoked by commonbutton on JSF page, when button clicked following error occurred:

 Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52) [httpcore-4.3.jar:4.3] at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56) [httpcore-4.3.jar:4.3] at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46) [httpcore-4.3.jar:4.3] ...... 

googled it, seems httpclient jar file has conflict with some other class, but I really can't figure out which one, and all dependencies in pom are necessary.

BTW, I am using WildFly 8 CR as server.

Thanks in advance.

2
  • Smells a lot like a you have two different versions of the httpclient in your classpath. Have you checked if WildFly comes with a httpclient? Other than that, maybe one of your dependencies pulls its own httpclient. Try mvn dependency:tree and check if there are two versions of httpclient Commented Mar 27, 2014 at 9:58
  • 1
    Also, probably unrelated, you use the "jboss-javaee-6.0-with-security" bom in dependency management, but in your dependencies, you use javaee-web-api-7.0 Commented Mar 27, 2014 at 10:00

1 Answer 1

1

You should not be mixing EE6 & 7 poms as it can bring you problems in your app.

For starter you should replace

<dependency> <groupId>org.jboss.bom</groupId> <artifactId>jboss-javaee-6.0-with-security</artifactId> <version>${version.jboss.bom}</version> <type>pom</type> <scope>import</scope> </dependency> 

With

<dependency> <groupId>org.wildfly.bom</groupId> <artifactId>jboss-javaee-7.0-with-security</artifactId> <version>8.0.0</version> <type>pom</scope> <scope>import</scope> </dependency> 

you could also remove:

 <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> 

as you get all that already as part of jboss-javaee-7.0-with-security pom import but it does not hurt anyway.

Also replace

 <plugin> <groupId>org.jboss.as.plugins</groupId> <artifactId>jboss-as-maven-plugin</artifactId> <version>7.4.Final</version> </plugin> 

with:

<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>1.0.1.Final</version> </plugin> 

as othewise you will have problems with deploying to wildfly, also goal has changed from jboss-as:deploy to wildfly:deploy

you should be inspecting whole dependency tree if you have any duplicate http client in dependency tree.

you can do that by running

mvn dependency:tree 

it will give you what dependency is bringing in and from where.

As a side note, you should upgrade to WildFly 8.0.0 Final. Not related to your problem but just to get many bugfixes...

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.