1

Groovy WSClient を使用して Exchange サーバー wsdl に接続しようとしましたが、(wsdl を解析したいときに) 空のファイルを受信したため接続できません。私は次の行を使用しています:

Map mapClient=[
                    "https.truststore":"/path/jssecacerts",
                    "https.truststore.pass":"changeit",
                    "https.keystore":"/path/cacerts",
                    "https.keystore.pass":"changeit"
    ]

    def proxy=new WSClient("https://mail.exchangeserver:443/ews/services.wsdl", this.class.classLoader)
    proxy.setSSLProperties(mapClient)
    proxy.setBasicAuthentication("user","password")
    proxy.initialize()

空のファイルでの xml 解析エラーのため、基本的に proxy.initialize() で失敗します。ただし、ブラウザーを使用すると、完全な wsdl ファイルがあります。

これは SSL ハンドシェイクではありません。これを機能させるために何時間も戦ってきたからです。初めてのエラーでした…

これは、何らかの理由で間違っている BasicAuthentication だと思います。私がそう言う理由は次のとおりです。認証行をコメントアウトでき、同じ結果が得られます。

ヒントはありますか?

4

1 に答える 1

2

わかりました、別のフォーラムから、私は答えを得ました。これは、apache CXF (groovy WSClient のバックエンド) の既知の制限であり、wsdl をフェッチするときではなく、web サービスを使用するときにのみ資格情報を使用します! 回避策は、wsdl をローカルにロードし、次を使用して WSClient をビルドすることです。

new WSClient(this.class.classLoader.getResource("services.wsdl").toExternalForm(), 
             this.class.classLoader)

取引所ウェブサービスを利用している方はまだ終わりではありません!いくつかのエラーも修正する必要があります。

  • messages.xsd と types.xsd を services.wsdl と一緒にダウンロードします。
  • 行を置き換える types.xsd を修正します

    <xs:import namespace="http://www.w3.org/XML/1998/namespace"/>
    

 <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>

最後に、wsdl:service タグを追加して services.wsdl を修正します。

  <wsdl:service name="ExchangeWebService">
     <wsdl:port name="ExchangeWebPort" binding="tns:ExchangeServiceBinding">
         <soap:address location="https://myserver/EWS/exchange.asmx" />
     </wsdl:port>
  </wsdl:service>

これで、正しく初期化されるはずです。

于 2010-11-24T11:19:08.467 に答える