2010-11-23 77 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> 

就是这样,它现在应该正确初始化!