2

NetBeans7.0.1のアプリケーションにWebサービス参照を追加しようとしています。Metro WebサービスはSSLで保護されており、クライアントを実行するのと同じコンピューターでホストされています。「新しいWebサービスクライアント」ウィザードを使用していますが、SSLで保護されたWSDLを送信すると、次のエラーメッセージが表示されます。

wsdlまたはスキーマファイルのダウンロードに問題があります。

URL、プロキシ設定、またはサーバーが実行されているかどうかを確認してください。

URL:https ://192.168.0.200:8181/MyApp/myService?wsdl

Metroユーザーガイド-Webサービスクライアントアプリケーション(SSL)の例を保護するには、次のように記述します。

クライアントが使用するWebサービスのURLを切り取ってWSDLURLフィールドに貼り付けるように指示されたステップで、https:// full-qualified-hostname:8181 / CalculatorApplication / CalculatorWSService?wsdl(changes太字で示されている)は、このクライアントがセキュアポートを使用してWebサービスを参照する必要があることを示します。このサービスに初めてアクセスするときは、プロンプトが表示されたら証明書(s1as)を受け入れます。これは、クライアントにIDを確認するためにポップアップするサーバー証明書です。

場合によっては、URL https:// full-qualified-hostname:8181 / CalculatorApplication / CalculatorWSService?wsdlをダウンロードできなかったことを通知するエラーダイアログが表示されることがあります。ただし、これは正しいURLであり、サービスの実行時に読み込まれます。したがって、このエラーが発生した場合は、安全なWSDLを使用してWebサービスクライアントを作成する手順を繰り返します。2回目は、Webサービス参照が作成され、クライアントの作成を続行できます。

何度試しても同じエラーメッセージが表示されます(プロキシが設定されておらず、サーバーはサービスが展開された状態で実行されています)。証明書を受け入れると、WSDLがブラウザに表示されます。基本的なWSDLURL(HTTPSのないURL)を入力すると、ウィザードはそれを受け入れてクライアントを生成します。この作業を行うには何をする必要がありますか?

アップデート

クライアントとサービスを異なるマシンで実行している場合も同じです。デフォルトの開発証明書を使用しています。レトリバー出力:

エラー:I/Oエラーが発生しました。sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な認証パスが見つかりません`

VMargsでkeytoreとtruststoreを設定する必要がありますか?Webサービスを含む同じWebアプリケーションでこのサービス参照を使用したい場合はどうすればよいですか?

4

1 に答える 1

2

ここで答えが見つかりました:

次のオプションを指定してNetBeansを実行する必要があります。

<NETBEANS_HOME>/bin/netbeans.exe
-J-Djavax.net.ssl.trustStore=<AS_HOME>/domains/domain1/config/cacerts.jks 
-J-Djavax.net.ssl.keyStore=<AS_HOME>/domains/domain1/config/keystore.jks 
-J-Djavax.net.ssl.trustStorePassword=changeit 
-J-Djavax.net.ssl.keyStorePassword=changeit

私は実際にそれらを<NETBEANS_HOME>/etc/netbeans.conf、に設定しましたnetbeans_default_options。それでもエラーが発生しましたが、SSLで保護されたサービスのクライアントコードを生成できるようになりました。単純なWS呼び出しを実行すると、次のようになります。

重要な編集以下は、古いJAX-WSライブラリを使用している場合にのみ発生します。

スレッド"main"の例外javax.xml.ws.WebServiceException:'https:// localhost:8181 / myApp / myService?wsdl'wsdlが見つかりません。リソースをクラスパスに正しく配置します。

DATASTOREWS_WSDL_LOCATIONこれは、次のようなメソッドでclientsプロパティを設定することで解決できます。

private static URL getURL() {
    try {
        return new URL("https://localhost:8181/myApp/myService?wsdl");
    } catch (MalformedURLException ex) {
        Logger.getLogger(DataStoreWS_Service.class.getName()).log(Level.SEVERE, null, ex);
        return null;
    }
}

生成されるクライアントコードはJavaWebアプリケーションとは異なるため、これは単純なJavaアプリケーション用に生成する場合にのみ必要です。また、ローカルIPのように、完全修飾ホスト名で動作させることができませんでした。動作したのはローカルホストだけでした。重要なことの1つは、サービス側と同じMetroライブラリをバンドルすることを忘れないでください。NBバグレポート

于 2011-09-29T09:33:31.113 に答える