5

私は持っていWSDLます。HTTP基本的な(プリエンプティブな)認証を行う必要があります。何をすべきか?

私は試した :

Authenticator myAuth = new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("user", "pass".toCharArray());
    }
};
Authenticator.setDefault(myAuth);

しかし、それは機能しません:原因:

java.io.IOException:サーバーがHTTP応答コードを返しました:URLに対して401。

PS私はApacheCXF2.6.2とJBoss5.0.1を使用しています

4

1 に答える 1

16

認証に指定したものが十分ではありません。次のようにする必要があります。

private YourService proxy;

public YourServiceWrapper() {
    try {
        final String username = "username";
        final String password = "password";
        Authenticator.setDefault(new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(
                        username,
                        password.toCharArray());
            }
        });
        URL url = new URL("http://yourserviceurl/YourService?WSDL");
        QName qname = new QName("http://targetnamespace/of/your/wsdl", "YourServiceNameInWsdl");
        Service service = Service.create(url, qname);
        proxy = service.getPort(YourService.class);
        Map<String, Object> requestContext = ((BindingProvider) proxy).getRequestContext();
        requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url.toString());
        requestContext.put(BindingProvider.USERNAME_PROPERTY, username);
        requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
        Map<String, List<String>> headers = new HashMap<String, List<String>>();
        requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
    } catch (Exception e) {
        LOGGER.error("Error occurred in web service client initialization", e);
    }
}

プロパティ:

  1. YourService - 生成された Web サービス クライアント インターフェース。
  2. YourServiceWrapper() - サービスを初期化するラッパー クラス コンストラクター。
  3. ?WSDLurl -拡張子付きの Web サービスへの URL 。
  4. qname - コンストラクターの最初の引数:WSDLファイルのターゲット名前空間。2 番目: からのサービス名WSDL

次に、次のように Web サービス メソッドを呼び出すことができます。

proxy.whatEverMethod();
于 2012-10-15T11:31:48.163 に答える