【问题标题】:NoSuchMethodError when trying to create a WebClient on Glassfish尝试在 Glassfish 上创建 WebClient 时出现 NoSuchMethodError
【发布时间】:2015-02-09 14:41:05
【问题描述】:

我正在尝试创建一个 HtmlUnit WebClient,以便在 Glassfish 服务器上的 Java EE Servlet filter 内解析 Ember 应用网页。

servlet 代码:

  final WebClient webClient = new WebClient(); // causes error
  HtmlPage page = webClient.getPage(originalUrl);

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.enunciate</groupId>
            <artifactId>maven-enunciate-plugin</artifactId>
            <version>1.29</version>
            <executions>
                <execution>
                    <goals>
                        <goal>assemble</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <configFile>enunciate.xml</configFile>
                <enunciateArtifactId/>
                <enunciateArtifactId/>
                <moduleName/>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <warSourceExcludes>**/web.xml</warSourceExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.15</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.15</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.enunciate</groupId>
        <artifactId>enunciate-rt</artifactId>
        <version>1.29</version>
    </dependency>

    <dependency>
        <groupId>org.igniterealtime.smack</groupId>
        <artifactId>smack-core</artifactId>
        <version>4.0.6</version>
    </dependency>

    <dependency>
        <groupId>org.igniterealtime.smack</groupId>
        <artifactId>smack-tcp</artifactId>
        <version>4.0.6</version>
    </dependency>

    <dependency>
        <groupId>org.igniterealtime.smack</groupId>
        <artifactId>smack-extensions</artifactId>
        <version>4.0.6</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>

    <dependency>
        <groupId>com.paymill</groupId>
        <artifactId>paymill-java</artifactId>
        <version>5.0.0</version>
    </dependency>

    <dependency>
        <groupId>org.mindrot</groupId>
        <artifactId>jbcrypt</artifactId>
        <version>0.3m</version>
    </dependency>

    <dependency>
        <groupId>com.restfb</groupId>
        <artifactId>restfb</artifactId>
        <version>1.7.1</version>
    </dependency>

    <dependency>
        <groupId>com.google.api-client</groupId>
        <artifactId>google-api-client</artifactId>
        <version>1.19.1</version>
    </dependency>

    <dependency>
        <groupId>com.google.http-client</groupId>
        <artifactId>google-http-client-jackson</artifactId>
        <version>1.19.0</version>
    </dependency>

    <dependency>
        <groupId>com.google.apis</groupId>
        <artifactId>google-api-services-plus</artifactId>
        <version>v1-rev209-1.19.1</version>
    </dependency>

    <dependency>
        <groupId>org.codemonkey.simplejavamail</groupId>
        <artifactId>simple-java-mail</artifactId>
        <version>2.1</version>
    </dependency>

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.10</version>
    </dependency>
</dependencies>

错误:

java.lang.NoSuchMethodError: org.apache.http.impl.cookie.BrowserCompatSpecFactory.create(Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/cookie/CookieSpec;
    at com.gargoylesoftware.htmlunit.CookieManager.<init>(CookieManager.java:54)
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:136)
    at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:199)

【问题讨论】:

  • 看起来像 http 客户端版本中的冲突。您正在尝试使用(添加为依赖项)4.4。 Google Http 客户端依赖于&lt;project.httpclient.version&gt;4.0.1&lt;/project.httpclient.version&gt;
  • 你可以忽略deps列表中的org.apache.httpcomponents:httpclient:4.4,即使没有它也会出现错误。
  • 刚刚删除了 com.google.http-client:google-http-client-jackson:1.19.0。同样的错误。所以这不是问题。是什么干扰了 HtmlUnit 依赖项?
  • 您是否尝试将它们都删除?你可以看看htmlunit pom。它使用 4.3.3。我不是一个真正的 HttpClient 用户,所以我真的不知道是否有什么大的区别。但通常当我看到 NoSuhMethodError 时,90% 的时间是依赖版本控制冲突。这是我最好的猜测
  • 即使google-api-client 也依赖于 HttpClient 4.0.1。您应该尝试对依赖项进行一些 maven 排除,因此所有这些都只依赖于一个版本。

标签: maven jersey apache-httpclient-4.x htmlunit jersey-2.0


【解决方案1】:

显然将HtmlUnit 依赖项移至依赖项列表的底部解决了该问题。就像提到的 peeskillet 一样,这不是一个完整的解决方案,因为我们仍然不知道是什么导致了这个问题,但它可以作为第一个解决方案。如果你找到罪魁祸首,请回答。

【讨论】:

    【解决方案2】:

    我有同样的错误,但 html 单元不是解决方案。我将 httpclient.jar 放在顶部,这样问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2020-03-02
      • 2011-02-10
      • 2017-10-12
      相关资源
      最近更新 更多