4

ダイジェスト認証を必要とするWebサービスに接続するクライアントをJavaで作成したいと思います。私はJavaとJavaスタックに精通していないので、調査を行い、jax-ws、axis2、xcf、およびmetroに出くわしました。JAX-WSはAPIであり、JDKにはリファレンス実装がありますが、ダイジェスト認証のサポートがないことを学びました。

私が最初に試みたのは、Eclipse IDEにaxis2のサポートが組み込まれているため、axis2を使用することでした。次のコードはダイジェスト認証ワークフローに従っているようですが、どういうわけかそれでも最終的に認証に失敗します。

Service1Stub stub = new Service1Stub();

HttpTransportProperties.Authenticator authenticator = new Authenticator();
List<String> authSchemes = new ArrayList<String>();
authSchemes.add(Authenticator.DIGEST);
authenticator.setAuthSchemes(authSchemes);
authenticator.setUsername("doman user");
authenticator.setPassword("domain password");
authenticator.setPreemptiveAuthentication(true);
Options options = stub._getServiceClient().getOptions();
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, authenticator);
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, org.apache.axis2.Constants.VALUE_FALSE);

GetData getData = new GetData();
getData.setValue(25);
GetDataResponse data = stub.getData(getData);
System.out.println(data.getGetDataResult());

2番目の試みはメトロフレームワークを使用することでしたが、JAXBバージョンに関連するいくつかのエラーが発生します。

java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI needs 2.2 API.

JDK 1.6.0_03を使用する必要があるため、これはJDKのバージョンの不一致が原因で発生していると思いますが、展開中に多くの問題が発生する可能性があるため、推奨される「承認済みディレクトリメカニズム」も使用したくありません。

私は完全に迷子になっていて、Javaでのダイジェスト認証を必要とするWebサービスを利用するための最も簡単で、最も速く、最新の方法を探していますか?できれば、依存関係をできるだけ少なくしてください。

4

2 に答える 2

1

Metro フレームワークは構成が複雑すぎて、私が見つけたドキュメントは不完全でした。だから私はApache Axis2を使ってそれをやった。

手順:

  • Apache Axis2 バイナリをダウンロードして抽出します。
  • すべての jar ファイルへの参照
  • /bin フォルダーに移動し、wsdl2java を使用してクライアント コードを生成します。

wsdl2java -S src -uri "wsdl_file_location"

フォルダーの下のすべてを Java アプリケーションにコピーしsrc、次のようにサービスに接続します。

//Fictious is the name of the web service
FictiousStub stub = new FictiousStub("servicelocation/fictiousService.php");

HttpTransportProperties.Authenticator authenticator = new Authenticator();
List<String> authSchemes = new ArrayList<String>();
authSchemes.add(Authenticator.DIGEST);
authenticator.setAuthSchemes(authSchemes);
authenticator.setUsername("admin");
authenticator.setPassword("12345");
authenticator.setPreemptiveAuthentication(true);
Options options = stub._getServiceClient().getOptions();
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, authenticator);
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, org.apache.axis2.Constants.VALUE_FALSE);
于 2013-04-02T13:47:54.420 に答える