12

Java プログラムを使用して smartsheet API に接続しようとしています。最初は、Java キーストアに追加することで解決されたサイト証明書に問題がありました。コードを実行しようとすると、次のエラーが発生します。

Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
    at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:955)
    at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:58)
    at com.smartsheet.api.internal.http.DefaultHttpClient.<init>(DefaultHttpClient.java:64)
    at com.smartsheet.api.SmartsheetBuilder.build(SmartsheetBuilder.java:203)
    at SmartsheetConnection.main(SmartsheetConnection.java:13)

これは私のコードです (私は彼らのドキュメントに従いました)。

import com.smartsheet.api.*;
import com.smartsheet.api.models.*;
import com.smartsheet.api.models.enums.*;
import com.smartsheet.api.oauth.*;

public class SmartsheetConnection {
    public static void main(String[] args) throws SmartsheetException {
        // Set the access token.
        Token token = new Token();
        token.setAccessToken("foo");
        Smartsheet smartsheet = new SmartsheetBuilder().setAccessToken(token.getAccessToken()).build();
    }
}

エラーをスローしている行は(144行目)です

@Deprecated
    public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
        = AllowAllHostnameVerifier.INSTANCE; 

しかし、私はそれをどうするかわかりません。依存関係を取得するためにmavenを使用しています。Apache HttpComponents のバージョンと何か関係がありますか?

ここに pom.xml があります

    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.smartsheet</groupId>
            <artifactId>smartsheet-sdk-java</artifactId>
            <version>2.0.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-apache-client</artifactId>
            <version>1.9</version>
        </dependency>
    </dependencies>
4

4 に答える 4

11

httpcoreこのエラーに関する他の投稿は、通常、競合するバージョンのjarが原因であることを示唆しているようです。httpcoreつまり、クラスパス上のの古いバージョンです。

詳細については、次の投稿をチェックアウトすることをお勧めします。

于 2015-09-26T15:18:06.397 に答える
5

返信が少し遅れていることはわかっていますが、実際には同じ問題に苦しんでおり、Maven Shade プラグインを使用して解決策を見つけました。

問題は、JAR の競合です。おそらく、プロジェクトは、アプリケーションが実行されているコンテナーとは異なるバージョンの HTTPclient を使用しています。

これを解決するには、HttpClient のパッケージ名を、JAR をパッケージ化する指定された名前に変更する以下の Maven Shade プラグインを使用します。これにより、コード内のすべての使用法もリファクタリングされます。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
        <configuration>
            <relocations>
              <relocation>
                <pattern>org.apache.http</pattern>
                <shadedPattern>org.shaded.apache.http</shadedPattern>
              </relocation>
            </relocations>
        </configuration>
    </execution>
</executions>
</plugin>

上記のサンプルは、HttpClient Package をorg.shaded.apache.httpfromで変更します。org.apache.http

Maven Shade はまた、fat/uber jar を作成するため、最終的なパッケージ サイズが大きくなり、POM の依存関係で言及したすべてのクラスが含まれます。

すべての依存関係 jar を最終的な jar に含めたくない場合は、依存関係のスコープを として追加します<scope>provided</scope>

于 2016-07-02T13:39:01.203 に答える