И снова Web-сервис

Тема в разделе "Lotus + Java + LS2J", создана пользователем TAG, 25 май 2010.

  1. TAG

    TAG Гость

    Прочитал предварительно статьи на сервере IBM и на этом форуме.
    Создал простейший сервис в базе на сервере Domino.
    ввожу URL в Explorer, ответ нормальный.

    Развернул и попробовал протестировать его с использованием ECLIPSE (рекомендация от IBM - мол, проще).
    Не тут то было.

    на URL http://web4:80/TAG/Rooms.nsf/WebTEST?OpenWebService
    отвечает ошибкой (возможно, нужен логин и пароль):

    IWAB0379E Unable to open http://web4:80/TAG/Rooms.nsf/WebTEST?OpenWebService.
    IWAB0135E An unexpected error has occurred.
    WSDLException
    WSDLException: faultCode=INVALID_WSDL: : The entity "nbsp" was referenced, but not declared.

    попробовал URL https://web4:80/names.nsf?Login&Usernam...?OpenWebService

    снова ошибка:
    IWAB0379E Unable to open https://web4:80/names.nsf?Login&Usernam...?OpenWebService.
    IWAB0135E An unexpected error has occurred.
    WSDLException
    WSDLException: faultCode=OTHER_ERROR: Remote host closed connection during handshake

    Так что это за гр*цензура*ый механизм, если его невозможно нормально проверить!
    Или что, для проверки нужно осваивать жаву?
     
  2. Klido

    Klido Гость

    ну насчет проще с эклипса - я бы так не сказал... вот пример простейшего подхода для вызова вэб-сервисов из лотуса
    Consuming Web services from a Lotus Domino Java agent
    классика про создание
    Lotus Notes/Domino 7 Web Services

    в 8-ке несколько поменялось, но я пробовал как выше - работает в простом случае... проблемы возникают при вызове веб-сервисов сторонних, которые используют новые подходы - тут уж копать и копать...
    вот тут http://codeby.net/ipb.html?act=Searc...ighlite=%2Bwsdl можно увидеть немало тем похожих и на все вкусы подходы...
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Лотус позволяет создавать веб-сервисы и с использованием ЛС. Для тестирования можно использовать всё, чем владеете, хоть VBScript. Так что без Java можно обойтись. Но лучше всё-таки освоить. Я для тестирования использовал NetBeans, образцом кода поделился turumbay: http://codeby.net/ipb.html?s=&sh...st&p=170948
    Информация о веб-сервисах от IBM (рус):
    http://www.ibm.com/developerworks/ru/libra...no-webservices/
    http://www.ibm.com/developerworks/ru/libra...d7-webservices/
     
  4. TAG

    TAG Гость

    Спасибо!
     
  5. TAG

    TAG Гость

    Протестировал web-сервис только на локальной машине с использованием двух инструментов:
    Eclipse, soapUI.

    Попытки тестирования этой же базы на сервере не дают успеха, так как не знаю, как программно
    авторизоваться перед тем, как обращаться к Web-сервису.

    Может быть кто-нибудь подскажет, как послать программно логин и пароль, а потом обратиться к Web-сервису в Eclipse или soapUI?
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ну так посмотрите код по ссылке, которую я давал в предыдущем посте. Там как раз с авторизацией.
     
  7. TAG

    TAG Гость

    Там написано много, но я не понимаю слэнг типа "печеньки" и пр. Не понимаю, как это сделать конкретно в Eclipse или soapUI.
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    "Печеньки" — это куки. Средство эмуляции сессии в протоколе HTTP. Подробнее — google.
    Втыкаете нижеприведённый код в эклипс, правите вверху в функции main, значения, начинающиеся на "YOUR_" и запускаете. Правда, тут протокол HTTPS, если не будет работать, заменить везде HTTPS на HTTP и удалить код в функции doPost между комментариями
    //Create a trust manager that does not validate certificate chains
    и
    //End create a trust manager that does not validate certificate chains
    Код (Text):
    package YOUR_PACKAGE;
    import java.io.*;
    import java.net.*;
    import javax.net.ssl.*;

    public class HTTPSConnectionExample {

    public static void main(String[] args ){
    try {
    String urlString = "https://YUOR_SERVER";
    String login = "YOUR_LOGIN";
    String password = "YOUR_PASSWORD";
    DominoHTTPSConnection domino = new DominoHTTPSConnection(urlString, login, password);
    String content = "YOUR_XML_REQUEST";
    System.out.println(content);
    urlString = "YOUR_DATABASE.nsf/YOUR_WEBSERVICE/";
    String res = domino.doPost(urlString, content);
    System.out.println(res);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    static class DominoHTTPSConnection{
    private String serverAddress = "";
    private String sessionId = "";

    DominoHTTPSConnection(String serverAddress, String sessionId){
    this.serverAddress = serverAddress;
    this.sessionId = sessionId;
    }

    DominoHTTPSConnection(String serverAddress, String login, String password){
    this.serverAddress = serverAddress;
    login(login, password);
    }

    private void login(String login, String password) {
    HttpsURLConnection connection = null;
    try {
    String loginData = "&Username=" + login + "&Password=" + password;
    URL url = new URL(serverAddress + "/names.nsf?login");
    connection = doPost(url, loginData, "");
    sessionId = getSessionId(connection);
    if (sessionId.equals("")) throw new IllegalArgumentException("Can't create session");
    } catch (Exception e) {
    throw new RuntimeException(e);
    } finally {
    closeConnection(connection);
    }
    }

    private void closeConnection(HttpsURLConnection connection){
    if (connection != null) {
    connection.disconnect();
    }
    }

    private HttpsURLConnection doPost(URL url, String postData, String sessionId) throws IOException {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    return null;
    }
    public void checkClientTrusted(
    java.security.cert.X509Certificate[] certs, String authType) {
    }
    public void checkServerTrusted(
    java.security.cert.X509Certificate[] certs, String authType) {
    }
    }
    };

    // Install the all-trusting trust manager
    try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
    e.printStackTrace();
    }

    HostnameVerifier hv = new HostnameVerifier() {
    public boolean verify(String urlHostName, SSLSession session) {
    System.out.println("Warning: URL Host: "+urlHostName+" vs. "+session.getPeerHost());
    return true;
    }
    };

    HttpsURLConnection.setDefaultHostnameVerifier(hv);
    //End create a trust manager that does not validate certificate chains

    HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    connection.setRequestProperty("Content-Length", Integer.toString(postData.getBytes().length));
    connection.setRequestProperty("Content-Language", "en-US");
    connection.setRequestProperty("Cookie", sessionId);

    connection.setInstanceFollowRedirects(false);
    connection.setUseCaches(false);
    connection.setDoInput(true);
    connection.setDoOutput(true);

    DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
    wr.writeBytes(postData);
    wr.flush();
    wr.close();
    return connection;
    }

    private String getSessionId(HttpURLConnection connection) {
    String cookieVal = connection.getHeaderField("Set-Cookie");
    if (cookieVal == null)
    return "";
    return cookieVal.substring(0, cookieVal.indexOf(";"));
    }

    public String doPost( String path , String postData ){
    HttpsURLConnection connection = null;
    try {
    URL url = new URL( serverAddress + path );
    connection = doPost( url , postData , sessionId);
    return getResponseText( connection );
    } catch ( Exception e ){
    throw new RuntimeException( e );
    } finally {
    closeConnection( connection );
    }
    }

    private String getResponseText( HttpURLConnection connection ) throws IOException{
    BufferedReader rd = null;
    try {
    rd = new BufferedReader(
    new InputStreamReader(connection.getInputStream()));
    String line;
    StringBuffer response = new StringBuffer();
    while ((line = rd.readLine()) != null) {
    response.append(line);
    response.append("\n\r");
    }
    return response.toString();
    } finally {
    rd.close();
    }
    }

    public String getSessionId(){
    return sessionId;
    }
    }
    }
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    какие-то "необычные" разработчики появляться на форуме стали ;)
    код изучать не хотят, спрашивать гугл - тоже
    как студенты. кот. передирают рефераты из тырнета - знаний 0, желаний 0 (учиться), зато результат давай
    что из таких повырастает?... (я-то ответ знаю ;) )
     
  10. TAG

    TAG Гость

    nvy
    Огромное спасибо! Теперь буду разбираться. Я новичок в программировании под WEB, поэтому задаю много вопросов.
     
Загрузка...
Похожие Темы - снова Web сервис
  1. DoberGroup
    Ответов:
    0
    Просмотров:
    18
  2. vasnas
    Ответов:
    0
    Просмотров:
    959
  3. Antigo
    Ответов:
    4
    Просмотров:
    1.052
  4. freescape
    Ответов:
    0
    Просмотров:
    1.178
  5. 1ive
    Ответов:
    4
    Просмотров:
    3.186

Поделиться этой страницей