2010-11-23 80 views
1

我試圖用groovy WSClient連接到Exchange服務器wsdl,但不能因爲我收到一個空文件(當我想分析wsdl時)。 我使用下面幾行:WSClient無法連接交換wsdl on https

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() 

()它基本上是失敗的proxy.initialize因爲XML上的空文件解析錯誤的。 但是,當我使用瀏覽器時,我有完整的wsdl文件。

這不是SSL握手,因爲我已經打了幾個小時才能使它工作。這是我得到的第一個錯誤...

我認爲這是由於某種原因錯誤的BasicAuthentication。我這樣說的原因是:我可以註釋掉認證行,我有相同的結果。

任何提示?

+0

您使用的是WSClient和Groovy的哪個版本? – 2010-11-23 10:06:17

回答

2

好的,從另一個論壇,我得到了我的答案。 這是apache CXF(groovy WSClient的後端)的已知限制,它僅在使用webservice時使用證書,而不是在獲取wsdl時使用證書! 解決方法是在本地加載WSDL和使用建立WSClient:

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

使用web服務交換的,還沒有完成!你需要修正一些錯誤,以及:

  • 下載messages.xsd並與services.wsdl一起types.xsd
  • 修復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"/> 

終於解決services.wsdl加入一個wsdl:服務標籤

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

就是這樣,它現在應該正確初始化!