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

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

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

на URL
Для просмотра контента необходимо: Войти или зарегистрироваться

отвечает ошибкой (возможно, нужен логин и пароль):

IWAB0379E Unable to open
Для просмотра контента необходимо: Войти или зарегистрироваться
.
IWAB0135E An unexpected error has occurred.
WSDLException
WSDLException: faultCode=INVALID_WSDL: : The entity "nbsp" was referenced, but not declared.

попробовал URL
Для просмотра контента необходимо: Войти или зарегистрироваться


снова ошибка:
IWAB0379E Unable to open
Для просмотра контента необходимо: Войти или зарегистрироваться
.
IWAB0135E An unexpected error has occurred.
WSDLException
WSDLException: faultCode=OTHER_ERROR: Remote host closed connection during handshake

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

Klido

#2
ну насчет проще с эклипса - я бы так не сказал... вот пример простейшего подхода для вызова вэб-сервисов из лотуса
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 можно увидеть немало тем похожих и на все вкусы подходы...
 

nvyush

Lotus team
22.04.2009
2 317
0
#3
Или что, для проверки нужно осваивать жаву?
Лотус позволяет создавать веб-сервисы и с использованием ЛС. Для тестирования можно использовать всё, чем владеете, хоть 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/
 
T
#4
Лотус позволяет создавать веб-сервисы и с использованием ЛС. Для тестирования можно использовать всё, чем владеете, хоть 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/
Спасибо!
 
T
#5
Протестировал web-сервис только на локальной машине с использованием двух инструментов:
Eclipse, soapUI.

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

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

nvyush

Lotus team
22.04.2009
2 317
0
#6
Может быть кто-нибудь подскажет, как послать программно логин и пароль, а потом обратиться к Web-сервису в Eclipse или soapUI?
Ну так посмотрите код по ссылке, которую я давал в предыдущем посте. Там как раз с авторизацией.
 
T
#7
Ну так посмотрите код по ссылке, которую я давал в предыдущем посте. Там как раз с авторизацией.
Там написано много, но я не понимаю слэнг типа "печеньки" и пр. Не понимаю, как это сделать конкретно в Eclipse или soapUI.
 

nvyush

Lotus team
22.04.2009
2 317
0
#8
"Печеньки" — это куки. Средство эмуляции сессии в протоколе 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
Код:
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;
}
}
}
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#9
какие-то "необычные" разработчики появляться на форуме стали ;)
код изучать не хотят, спрашивать гугл - тоже
как студенты. кот. передирают рефераты из тырнета - знаний 0, желаний 0 (учиться), зато результат давай
что из таких повырастает?... (я-то ответ знаю ;) )
 
T
#10
nvy
Огромное спасибо! Теперь буду разбираться. Я новичок в программировании под WEB, поэтому задаю много вопросов.