2016-10-06 10 views
1

Install4jプロジェクトでは、Jerseyを使用してWebサーバーを呼び出す必要がありました。AbstractInstallerScreenでJerseyクライアントを作成する依存関係の問題

Client client = Client.create(new DefaultClientConfig()); 

CustomActionでは正常に動作しますが、このタスクのためにAbstractInstallActionを実装しました。今、私はAbstractInstallerScreenで同じコードを使いたいと思っていました。私が使用したジャージの依存関係をロードし、私のPOMファイルで

Oct 06, 2016 10:10:24 AM com.sun.jersey.spi.inject.Errors processErrorMessages 
SEVERE: The following errors and warnings have been detected with resource and/or provider classes: 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    SEVERE: Missing dependency for constructor public com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers) at parameter index 0 
    ... 
    SEVERE: Missing dependency for field: com.sun.jersey.spi.MessageBodyWorkers com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider.bodyWorker 
com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) 
    at com.sun.jersey.api.client.Client.<init>(Client.java:188) 
    at com.sun.jersey.api.client.Client.<init>(Client.java:171) 
    at com.sun.jersey.api.client.Client.create(Client.java:683) 
    ... 

:画面内の同じコード行の呼び出しは、次の例外を(私はログエントリを短縮し、私はあなたがポイントを得るだろうと思う)原因:

<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-multipart</artifactId> 
    <version>1.18.1</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>1.18.1</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.18.1</version> 
</dependency> 

そこで質問です:私は例外が不足している依存関係を言って取得しない、またはカスタムアクションでジャージを使用しての違いは何であるように、どのように私は、インストーラ画面で電話をかける必要がありますか?

答えて

1

これは、JAX-WSがコンテキストクラスローダーを誤って使用したためです。

スクリプトとアクションでは、install4jがこのような理由で一時的にコンテキスト・クラス・ローダーをリセットしますが、画面やフォーム・コンポーネントではこれは起こりません。

あなたがそのようなあなたのコードを呼び出す場合:

ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader(); 
try { 
    Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); 
    // TODO Add your code that uses JAX-WS 
} finally { 
    Thread.currentThread().setContextClassLoader(oldContextClassLoader); 
} 

それが動作するはずです。

+1

解決しました!ありがとうございました! –