2012-11-12 15 views
8

私は、SharePointのWebサービスのいずれかと統合する必要のあるアプリケーションを持っています。このWebサービスには自由にアクセスすることはできず、認証が必要です。基本認証でCXF wsdl2javaを使用するようにMavenを設定する

このように、私のアプリケーションの標準wsdl2java Mavenプラグインは、generate-sourcesフェーズが実行されたときにHTTP 401エラーを出します。

スタブを生成するユーザー/パスワードを提供できるように、Maven/POMを設定する方法はありますか?

私はこれが不可能だと言っているが、すべての回答は1年以上です。 Mavenがこれについてのアップデートを発行したかどうかはわかりません。 1つの選択肢は、WSDLのローカルコピー(hereのように)を保存することですが、ローカルコピーを避けることをお勧めします。

答えて

8

あなたはCXFについて言及していたので、私はあなたがcxf-codegen-pluginを意味していたと思います。ハックのビットですが、うまくいきます。

HTTP認証資格情報は、java.net.Authenticatorを使用して提供できます。 getPasswordAuthentication(..)メソッドをオーバーライドする独自のAuthenticatorクラスを定義する必要があります。次に、デフォルトの認証者として設定する必要があります。私が知る限り、Authenticator.setDefault(..)を使用してプログラムでのみ宣言的に(例えば環境プロパティーを使用して)行うことはできません。

Authenticator.setDefault(..)を呼び出すために、私はCXF拡張メカニズムを使用します。同様のクラスと別のMavenプロジェクトを作成します。メイン\リソース\

public class AuthenticatorReplacer { 

    public AuthenticatorReplacer(Bus bus) { 
     java.net.Authenticator.setDefault(new java.net.Authenticator() { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("test", "test123" 
         .toCharArray()); 
      } 
     }); 
    } 

} 

とファイルsrcを\ META-INF \のCXF内容で\バス-extensions.txt:

org.example.AuthenticatorReplacer::false 

は次にとして新たに作成したプロジェクトを追加CXF-codegenを-プラグインへの依存:

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>${project.version}</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.example</groupId> 
      <artifactId>cxf-authenticator-replacer</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
    ... 
</plugin> 

この方法AuthenticatorReplacerはCXF拡張メカニズムによって初期化され、私たちとデフォルトの認証に置き換えられています。

+0

あなたは今日これで私の人生を保存しました。誰もが "ハック"なしで同じことを達成する方法を見つけ出すことができればうれしいですが、ちょっと動作します。 – membersound

0

私はDawidのソリューションが機能することを確認しました。また、SoapUIを使用してwsdlをプルダウンしてキャッシュし、SoapUiコード生成サポートを使用してcxfを使用してコードを生成することもできます。

http://java.dzone.com/tips/generating-client-java-code

-1

Dawidのソリューションは、あまりにも私のために動作します。しかし、それはややこしいです。 Eclipseでは、pom.xmlは「wsdl2javaが失敗しました:拡張クラスAuthenticatorReplacerをロードできませんでした」という文句を続けています。

MVN生成-ソースを

Javaクラスは、その後正常に生成されます:あなたは、このエラーメッセージを無視し、コマンドラインを使用する必要があります。

+0

ようこそ。コメントは、回答としてではなく、そのように掲示する必要があります。別の問題を解決する必要がある場合は、別の質問をしてください。参照:[ ヘルプセンター>応答 一部の回答はなぜ、どのように削除されますか?](http://stackoverflow.com/help/deleted-answers) – mins

+0

サイトへようこそ。コメントは、回答としてではなく、そのように掲示する必要があります。別の問題を解決する必要がある場合は、別の質問をしてください。参照:[なぜ、どのように答えが削除されるのですか?](http://stackoverflow.com/help/deleted-answers) – mins

2

@Dawid Pytelのソリューションのクリーンな代替は、WSDLクラスの自動生成のライフサイクルの中に、このクラスを実行するために、次のようになります。

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.4.0</version> 
     <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>java</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <mainClass>path.to.AuthenticatorReplacer</mainClass> 
     </configuration> 
    </plugin> 

重要:AuthenticatorReplacermain(String[] args)クラスであると内部のコードを実行する必要があります。

関連する問題