Как стать автором
Обновить

Создание веб-сервис клиента на axis

В одном банке мне нужно было получить кредитную историю из НБКИ (национальное бюро кредитных историй)

создать классы на основе wsdl:
содержание wsdl2java.cmd

set AXIS_HOME=C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4
java -cp %AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;
%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;
%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java %1 %2 %3 %4

gen_javafrom_wsdl.cmd
wsdl2java.cmd ConnectorService.wsdl

1) сохранил wsdl файл (ConnectorService.wsdl)

2) создаем бат файл.

3) проверяем его — запускаем.На экран выводится примерно следующее:

==============начало консольного вывода===========================
c:\TEMP\ws\wsdl2java_trying\1>java -cp C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\axis.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\axis-ant.jar;
C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\commons-discovery-0.2.jar;
C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\commons-logging-1.0.4.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\jaxrpc.jar;
C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\log4j-1.2.8.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\saaj.jar;
C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java
— Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
The wsdl URI was not specified.
Usage: java org.apache.axis.wsdl.WSDL2Java [options] WSDL-URI
Options:
-h, --help

-w, --wrapArrays
Prefers building beans to straight arrays for wrapped XML ar
ray types (defaults to off).
==============конец консольного вывода============================
Таким образом можем почитать хелп по использованию данной утилиты.

4) генерим скелет(stub) клиента, выполнив комманду «wsdl2java.cmd ConnectorService.wsdl»:

==============начало консольного вывода===========================
c:\TEMP\ws\wsdl2java_trying\1>wsdl2java.cmd ConnectorService.wsdl

c:\TEMP\ws\wsdl2java_trying\1>set AXIS_HOME=C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4

c:\TEMP\ws\wsdl2java_trying\1>java -cp C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\axis.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\axis-ant.jar;C:\distrib\Java\l
ib\axis\axis-bin-1_4\axis-1_4\lib\commons-discovery-0.2.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\commons-logging-1.0.4.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-
1_4\lib\jaxrpc.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\log4j-1.2.8.jar;C:\distrib\Java\lib\axis\axis-bin-1_4\axis-1_4\lib\saaj.jar;C:\distrib\Java\lib\axis\axis-bin-
1_4\axis-1_4\lib\wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java ConnectorService.wsdl
— Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
==============конец консольного вывода============================

5)Полученная структура фалов:

==============начало консольного вывода===========================
c:\TEMP\ws\wsdl2java_trying\1>tree /f
Структура папок
Серийный номер тома: 00080178 8C44:83ED
C:.
¦ ConnectorService.wsdl
¦ wsdl2java.cmd
¦
L---ru
+---creditregistry
¦ L---_2007
¦ L---webservice
¦ L---ConnectorService
¦ ConnectorServiceHttpBindingStub.java
¦ ConnectorService_PortType.java
¦ ConnectorService_Service.java
¦ ConnectorService_ServiceLocator.java
¦
L---mbtc
L---xws
L---connector
ConnectorBusinessRequest.java
ConnectorPersonRequest.java
ConnectorResponse.java
==============конец консольного вывода============================
Таким образом получаем полный необходимый набор классов.

но, файлы, сгенерированные таким образом все еще нуждаются в доработке (нужно будет дописать пару полей set и get, в зависимости от ошибок, которые будет писать компилятор)

Класс, который непосредственно обращается к web-сервису Credit Registry:

package ru.isb.creditreg;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import ru.creditregistry._2007.webservice.connectorservice.ConnectorServiceClient;
import ru.creditregistry._2007.webservice.connectorservice.ConnectorService;
import ru.mbtc.xws.connector.ConnectorPersonRequest;
import ru.mbtc.xws.connector.ObjectFactory;
import ru.mbtc.xws.connector.ConnectorResponse;
import java.util.GregorianCalendar;
import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl;
import java.io.File;
import java.io.FileInputStream;
import java.sql.ResultSet;
import java.util.Properties;
import org.codehaus.xfire.XFireRuntimeException;
import ru.isb.common.Logger;
import java.sql.Connection;
import ru.isb.creditreg.Connect;
import ru.isb.creditreg.Utl;

/**
* Класс, который непосредственно обращается к web-сервису Credit Registry.
*
* version 1.70 12 Oct 2007
* author Nikolay Mishin <mi@ya.ru>
*/

public class ServiceExecuter {
//Содержит методы
//ConnectToWebSrv — запрос и ответ

public static void ConnectToWebSrv() throws SQLException, FileNotFoundException, IOException {
//коннект к Oracle
Connect cnx = new Connect();
String[] args;
//создать коннектор
ConnectorServiceClient service = new ConnectorServiceClient();
//создать объект «свойства»
Properties prop = new Properties();
//получим системный путь (текущую директорию)
String path = System.getProperty(«user.dir»);
//загрузка параметров из файла
prop.load(new FileInputStream(path + File.separator + «cfg//conn.cfg»));
//чтение параметра из объекта свойств
String getConnectorServiceHttpPort=prop.getProperty(«getConnectorServiceHttpPort»);
//получение коннектора
ConnectorService client = service.getConnectorServiceHttpPort(getConnectorServiceHttpPort);
//создать пустой запрос
ConnectorPersonRequest personRequest = new ConnectorPersonRequest();//тип xml запроса ConnectorPersonRequest
//создать xml схему
ObjectFactory objectFactory = new ObjectFactory();//Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: ru.mbtc.xws.connector

//Базовые атрибуты
String login = ""; // имя пользователя
String password = ""; //пароль
Integer cacheuse = 0;// флаг использования кэша
//0 – не использовать
//-1 – по умолчанию (из профиля коннектора)
//-2 – поиск только из кэша
//>0 – глубина используемого кэша (количество дней)
Integer connectorcode = 0;//код используемого типа коннектора
//0 – НБКИ-B2B
//2 – ЦБ ЦККИ
//3 – ГПКС
//6 – EXPERIAN B2B
//7 – ФМС
String subrequestcode = "";//код функции/типа запроса для коннектора, если коннектор поддерживает несколько типов запросов
Integer is_current = 0;//текущий заголовок
String firstname = ""; // Имя
String middlename = "";//Отчество
String surname = ""; // Фамилия
Date dateofbirth ;// Дата Рождения
Integer dateofbirth_y = null;//год
Integer dateofbirth_m = null;//месяц
Integer dateofbirth_d = null;//день
String placeofbirth = "";//Место Рождения
String sex = "";//1 – male, 2 – female
String nationality = "";//Гражданство, код страны
Integer idtype = 0;//Код документа в соответствии с форматом TUTDF (Для всех коннекторов)
String idnum = "";//Номер документа
String idseries = "";//Серия документа
Date issuedate;// Дата выдачи документа
Integer issuedate_y = null;
Integer issuedate_m = null;
Integer issuedate_d = null;
String issueauthority = "";//Кем выдан документ
String issuelocation = "";// Место выдачи документа
String inn = "";// ИНН
String pfNum = "";// пенсионное
String subjectCode = "";// Код субъекта кредитной истории или Дополнительный код субъекта кредитной истории
String regaddrcity = "";//Место (Нас. пункт) регистрации
String regaddrstreet = "";// Адрес (Улица) регистрации
String regRegionCode = "";// Код региона (по справочнику E-I)
String actAddrCity = "";//Место (Нас. пункт) проживания
String actAddrStreet = "";//Адрес (Улица) проживания
String actRegionCode = "";// Код региона (по справочнику E-I)
//Другие атрибуты – Цель (причина) запроса
String reason = "";//
// по кодам НБКИ:
//01 = Auto Loan
//04 = Leasing
//06 = Mortgage
//07 = Credit Card
//09 = Consumer Credit
//10 = For development of business
//11 = For enlarging circulating assets
//12 = For equipment purchase
//13 = For building real estate
//14 = For securities purchase
//15 = Inter-bank credit
//50 = Account Review
//99 = Unknown
String currency = "";//Валюта, в контексте reason
String amount = "";// Сумма, в контексте reason
Integer application_pk = 0;//id задания на запрос кредитной истории
String is_done = "";//выполнено «Y»,«N»
Date date_finished ;//дата-время выполнения
Date date_processed ;//дата-время ответа
Logger.print(«Появился новый запрос: Запрашиваем данные из Credit Registry» +Utl.getTime());
cnx = new Connect();
ResultSet rs = Utl.getSQLRes(cnx.conn, «sql//header_rq.sql»);
try {

while (rs.next()) {
login = rs.getString( 1 );
password = rs.getString( 2 );
cacheuse = rs.getInt(3);
connectorcode = rs.getInt( 4 );
subrequestcode = rs.getString( 5 );
is_current = rs.getInt( 6 );
firstname = rs.getString( 7 );
personRequest.setFirstname(objectFactory.createConnectorPersonRequestFirstname(firstname));
middlename = rs.getString( 8 );
personRequest.setMiddlename(objectFactory.createConnectorPersonRequestMiddlename(middlename));
surname = rs.getString( 9 );
personRequest.setSurname(objectFactory.createConnectorPersonRequestSurname(surname));
dateofbirth_y =rs.getInt( 10 );
dateofbirth_m =rs.getInt( 11 );
dateofbirth_d =rs.getInt( 12 );
personRequest.setDateOfBirth(new XMLGregorianCalendarImpl(new GregorianCalendar(dateofbirth_y,dateofbirth_m,dateofbirth_d)));//dateofbirth
placeofbirth = rs.getString( 13 );
personRequest.setPlaceOfBirth(objectFactory.createConnectorPersonRequestPlaceOfBirth(placeofbirth));
idtype = rs.getInt( 14 );
personRequest.setIdType(objectFactory.createConnectorPersonRequestIdType(idtype));
idnum = rs.getString( 15 );
personRequest.setIdNum(objectFactory.createConnectorPersonRequestIdNum(idnum));
idseries = rs.getString( 16 );
personRequest.setIdSeries(objectFactory.createConnectorPersonRequestIdSeries(idseries));
issuedate_y =rs.getInt( 17 );
issuedate_m =rs.getInt( 18 );
issuedate_d =rs.getInt( 19 );
personRequest.setIssueDate(new XMLGregorianCalendarImpl(new GregorianCalendar(issuedate_y,issuedate_m,issuedate_d)));//dateofbirth
issueauthority = rs.getString( 20 );
personRequest.setIssueAuthority(objectFactory.createConnectorPersonRequestIssueAuthority(issueauthority));
issuelocation = rs.getString( 21 );
personRequest.setIssueLocation(objectFactory.createConnectorPersonRequestIssueLocation(issuelocation));
regaddrcity = rs.getString( 22 );
personRequest.setRegAddrCity(objectFactory.createConnectorPersonRequestRegAddrCity(regaddrcity));
regaddrstreet = rs.getString( 23 );
personRequest.setRegAddrStreet(objectFactory.createConnectorPersonRequestRegAddrStreet(regaddrstreet));
application_pk = rs.getInt( 24 );
is_done = rs.getString( 25 );
//запрашиваем кредитную историю
try {
Utl.LogRequestInfo(middlename, cacheuse, connectorcode, application_pk, firstname, surname);
Logger.print("...");
ConnectorResponse response = client.getPerson(personRequest,password,subrequestcode,connectorcode,login,application_pk.toString(),cacheuse);
// Logger.print("...1 "+Utl.getTime());
String path_sql=«sql//cr_response_insert.sql»;
path = System.getProperty(«user.dir»);
String sql = Utl.GetSqlFromFile(path, path_sql);
// Logger.print("...2 "+Utl.getTime());
PreparedStatement pstmt = cnx.conn.prepareStatement(sql);
pstmt.setInt(1, application_pk);
pstmt.setInt(2, cacheuse);
pstmt.setString(3, response.getResponse().getValue());
pstmt.setString(4, response.getReportCode().getValue());
pstmt.executeUpdate();
// Logger.print("...3 "+Utl.getTime());
Utl.updSQL(cnx.conn,
«sql//upd_appl.sql»,
application_pk,
"",
«Y»,
«0»);
// Logger.print("...4 "+Utl.getTime());
//Запускаем функцию обработки xml by Татьяна Габидулина
String procname = "{call scoring_pack.CR_parser(p_application_pk => ?)}";
pstmt = cnx.conn.prepareStatement(procname);
pstmt.setInt(1, application_pk);
pstmt.executeUpdate();
// Logger.print("...5 "+Utl.getTime());
Logger.print(«Сделано „+Utl.getTime());
} catch (FileNotFoundException ex) {
ex.printStackTrace();
Utl.InsertErr( application_pk, ex.getMessage());
} catch (IOException ex) {
ex.printStackTrace();
Utl.InsertErr( application_pk, ex.getMessage());
} catch (SQLException ex) {
ex.printStackTrace();
Utl.InsertErr( application_pk, ex.getMessage());
} catch (XFireRuntimeException e){
cnx = new Connect();
Utl.updSQL(cnx.conn,
“sql//upd_appl.sql»,
application_pk,
e.getMessage(),
«N»,
«1»);
Utl.InsertErr( application_pk, e.getMessage());
Logger.print(«мы в ServiceExecuter 7»);
}

}
rs.close();

} catch (IOException ex) {
ex.printStackTrace();
Utl.InsertErr( 0, ex.getMessage());
Logger.print(«мы в ServiceExecuter 9»);
} catch (SQLException ex) {
ex.printStackTrace();
Utl.InsertErr( 0, ex.getMessage());
Logger.print(«мы в ServiceExecuter 10»);
}


}

}
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.