상세 컨텐츠

본문 제목

Chapter 4 UDDI - 2

프로그래밍/웹서비스

by 라제폰 2008. 12. 13. 19:37

본문

6.     UDDI API 소개
UDDI 레지스트리에 비즈니스 정보를 게시하고 찾기 위한 방법으로는 다음과 같은 두 가지 방법이 있습니다.
 
·          UDDI 운영 사이트에 직접 방문
·          클라이언트 응용 프로그램을 이용
 
클라이언트 프로그램이 UDDI 레지스트리에 비즈니스 정보를 게시하거나 찾기 위해서는 클라이언트 의 요청을 XML 문서로 작성한 뒤에 이것을 다시 요청 SOAP 메시지로 포장하여 UDDI 레지스트리로 전송해야 한다.
 
UDDI API 엘리먼트
UDDI 버전 2 API 스펙에는 클라이언트가 UDDI 레지스트리에 어떤 작업을 요청하기 위해 클라이언트가 사용할 수 있는 다양한 XML 엘리먼트들을 정의해 놓고 있다. 이들 엘리먼트들은 다음 두 가지 종류로 구분된다.
 
·          publish API 엘리먼트 : UDDI 레지스트리에 비즈니스 정보를 생성하고, 변경 및 삭제 시에 사용된다. 생성 및 변경은 <save_xxx> 삭제는 <delete_xxx>가 엘리먼트가 사용된다.
대상 엘리먼트
<save_xxx>
<delete_xxx>
<businessEntity>
<save_business>
<delete_business>
<businessService>
<save_service>
<delete_service>
<bindingTemplate>
<save_binding>
<delete_binding>
<tModel>
<save_tModel>
<delete_tModel>
·          inquiry API 엘리먼트 : UDDI 레지스트리에서 비즈니스 정보를 찾기 위해 사용되는 <find_xxx>, <get_xxx> 엘리먼트가 여기에 속한다.
대상 엘리먼트
<find_xxx>
<get_xxx>
<businessEntity>
<find_business>
<get_businessDetail>
<businessService>
<find_service>
<get_serviceDetail>
<bindingTemplate>
<find_binding>
<get_bindingDetail>
<tModel>
<find_tModel>
<get_tModelDetail>
 
2.     JAXR(Java API for XML Registries)
UDDI 레지스트리에 정보를 저장하고 검색할 수 있는 표준 Java API를 제공한다. 이 기술의 기본 사용법은 JDBC 프로그래밍과 유사하다. 웹 서비스 클라이언트 개발자는 javax.xml.registry 패키지에 있는 인터페이스 메소드를 사용해서 JAXR 프로바이더가 UDDI 레지스트리와 작업을 하도록 코딩한다.
 
JAXR을 이용한 UDDI 레지스트리 검색 회사이름으로 회사 정보 찾기
예제를 실행하기전에 http://java.sun.com에 들어가서 JWSDP 최신버전을 설치 해야 합니다.
 
package webservice.uddi;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.util.Properties;
 
import javax.xml.registry.BulkResponse;
import javax.xml.registry.BusinessQueryManager;
import javax.xml.registry.Connection;
import javax.xml.registry.ConnectionFactory;
import javax.xml.registry.FindQualifier;
import javax.xml.registry.JAXRException;
import javax.xml.registry.RegistryService;
import javax.xml.registry.infomodel.EmailAddress;
import javax.xml.registry.infomodel.InternationalString;
import javax.xml.registry.infomodel.Organization;
import javax.xml.registry.infomodel.PersonName;
import javax.xml.registry.infomodel.TelephoneNumber;
import javax.xml.registry.infomodel.User;
 
public class uddiFindName {
   
    public uddiFindName() {
    }
   
    /**
     * 실행 메서드
     * @throws javax.xml.registry.JAXRException
     */
    public void exec()
    throws JAXRException {
        // Connection 객체를 생산하는 ConnectionFactory 객체 생성
        ConnectionFactory factory =  ConnectionFactory.newInstance();  
       
        factory.setProperties(setProperty());
       
        // JAXR 프로바이더의 연결을 위한 Connection 객체 생성
        Connection connection = factory.createConnection();       
       
        // RegistryService 객체 생성
        RegistryService rs = connection.getRegistryService();
       
        // 인쿼리 작업을 위해서 BusinessQueryManager 객체 생성
        BusinessQueryManager bqm = rs.getBusinessQueryManager();
 
        // 회사 이름으로 찾기
        BulkResponse response =
            bqm.findOrganizations(setSort(), setFinder(), null, null, null, null);
       
        // 검색된 모든 회사(Organization) 얻어냄
        Collection orgCollection = response.getCollection();
       
        Iterator orgIterator = orgCollection.iterator();
       
        // 검색된 회사가 있을 경우
        while (orgIterator.hasNext()) {
            // 한개의 회사(Organization) 뽑아
            Organization org = (Organization) orgIterator.next();
 
            // businessEntity 엘리먼트 내용에 대한 정보 얻기
            System.out.println("n---businessEntity 엘리먼트 내용에 대한 정보 얻기");
 
            // 회사 이름 설명 얻기
            InternationalString localeOrgName = org.getName();
            InternationalString localeOrgDesc = org.getDescription();
            String strOrgName = localeOrgName.getValue(Locale.ENGLISH);
            String strOrgDesc = localeOrgDesc.getValue(Locale.ENGLISH);
            System.out.println("회사 이름: " + strOrgName);
            System.out.println("회사 설명: " + strOrgDesc);
 
            // 회사에 대한 contact 정보 얻기    
            User user = org.getPrimaryContact();
            if (user!=null) {
                // 회사 담당자 이름 얻기
                PersonName personName = user.getPersonName();
                String strContactName = personName.getFullName();
                System.out.println("담당자: " + strContactName);
                // 회사 전화 번호 얻기
                Collection phoneCollection = user.getTelephoneNumbers(null);
                Iterator phoneIterator = phoneCollection.iterator();
                                                                      
                while (phoneIterator.hasNext()) {
                    TelephoneNumber phone = (TelephoneNumber) phoneIterator.next();
                    String strPhone = phone.getNumber();
                    System.out.println("전화번호: " + strPhone);
                }
                                                                      
                // 회사 이메일 주소 얻기
                Collection emailCollection = user.getEmailAddresses();
                Iterator emailIterator = emailCollection.iterator();
                while (emailIterator.hasNext()) {
                    EmailAddress email = (EmailAddress) emailIterator.next();
                    String strEmail = email.getAddress();
                    System.out.println("이메일: " + strEmail);
                }
                      }
                  }
    }
 
    /**
     * 회사 이름으로 찾기 위해 Collenction 객체 생성
     * @return
     */
    private Collection setFinder() {
        Collection namePatterns = new ArrayList();
        namePatterns.add("%test%");
        return namePatterns;
    }
 
    /**
     * 검색된 결과를 소팅하기 위해 Collection 객체 생성
     * @return
     */
    private Collection setSort() {
        Collection findQualifiers = new ArrayList();
        findQualifiers.add(FindQualifier.SORT_BY_NAME_DESC);
        return findQualifiers;
    }
 
    /**
     * JAXR 프로바이더와 연결하기 위한 정보 셋팅
     * @return 셋팅 정보
     */
    private Properties setProperty() {
        Properties props = new Properties();
        props.setProperty("javax.xml.registry.queryManagerURL",
                          "http://uddi.microsoft.com/inquire");
        return props;
    }
 
    public static void main(String[] args) {
        uddiFindName uddiClient = new uddiFindName();
        try {
            uddiClient.exec();
        } catch(JAXRException e) {
            e.printStackTrace();
        }
    }
}
위 샘플 프로그램은 http://uddi.microsoft.com/inquire UDDI 레지스트리에 등록된 서비스 중에 “test” 단어가 포함된 회사명 검색 결과를 내림차순으로 정렬한 것이다.

 


관련글 더보기