WSClient не может подключиться к обмену wsdl по https - PullRequest
1 голос
/ 23 ноября 2010

Я пытался подключиться с помощью 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, которая по какой-то причине неверна.Причина, по которой я так говорю: я могу закомментировать строку аутентификации, и у меня тот же результат.

Есть какие-нибудь подсказки?

1 Ответ

2 голосов
/ 24 ноября 2010

Хорошо, с другого форума я получил ответ. Это известное ограничение apache CXF (серверная часть groovy WSClient), и он использует учетные данные только при использовании веб-службы, а не при получении wsdl! Обходной путь должен загрузить wsdl локально и построить WSClient, используя:

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

для тех, кто использует exchange webservice, он еще не закончен! Вам также необходимо исправить некоторые ошибки:

  • загрузите 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"/>

и, наконец, исправьте 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>

Вот и все, теперь он должен правильно инициализироваться!

...