我试图将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()
它基本上在proxy.initialize()失败,因为空文件上的xml解析错误。 但是,当我使用浏览器时,我有完整的wsdl文件。
这不是SSL握手,因为我已经奋斗了好几个小时才能让它运转起来。这是我得到的第一个错误......
我认为这是BasicAuthentication由于某种原因是错误的。我这样说的原因是:我可以注释掉认证线,我也有相同的结果。
任何提示?
答案 0 :(得分:2)
好的,从另一个论坛,我得到了答案。 这是apache CXF(groovy WSClient的后端)的已知限制,它仅在使用webservice时使用凭证,而不是在获取wsdl时! 解决方法是在本地加载wsdl并使用以下命令构建WSClient:
new WSClient(this.class.classLoader.getResource("services.wsdl").toExternalForm(),
this.class.classLoader)
对于那些使用Exchange webservice的人来说,还没有完成!您还需要修复一些错误:
修复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:service标签
<wsdl:service name="ExchangeWebService">
<wsdl:port name="ExchangeWebPort" binding="tns:ExchangeServiceBinding">
<soap:address location="https://myserver/EWS/exchange.asmx" />
</wsdl:port>
</wsdl:service>
就是这样,它现在应该正确初始化!