2014-10-01 8 views
0

SOAP (Java Web Service) 메시지 형식에 대한 제안이 필요합니다. 두 가지 메시지 형식을 생각해보십시오.SOAP (Java Web Service) 메시지 형식 generic (이름/값 등록 정보) 노드 vs 특정 노드

이러한 접근 방식에 대한 의견을 공유해주십시오. 무엇을 추천하나요? :

1) 특정 메시지 형식 데이터의 실제 이름으로 메시지 노드를 지정하면

프로 아래의 샘플을 볼 수 등 사용자 이름, 성, 사회 보장 번호 (SSN) .... 같은 속성 메시지 xsd에는 전달할 데이터의 실제 데이터 유형이 있습니다. 이렇게하면 데이터가 유효한지 확인할 수 있습니다.

단점 : 메시지 형식을 변경하면 xsd가 변경되어 여러 버전의 서비스가 이어집니다. 이것은 다른 버전의 서비스를 유지 보수하는 데 드는 비용입니다.

2) 일반 메시지 형식 이름 값 쌍과 함께 메시지 노드를 지정하십시오. 아래 예제 메시지를 참조하십시오.

장점 : 추가 데이터는 메시지 형식을 변경하지 않고 추가 속성과 함께 보낼 수 있습니다. 단일 버전의 메시지는 쉽게 유지 보수 할 수 있습니다.

단점 : 데이터는 입력되지 않았으며 유효성을 확인할 수 없습니다. 서비스 구현은 속성 이름을 하드 코딩하고, 데이터를 구문 분석하고, 데이터의 유효성을 검사해야합니다. 여러 값으로 데이터를 처리하는 경우 쉼표 (,)와 같은 구분 기호가 사용됩니다. 날짜, 시간, 통화 데이터 등의 서식이 지정된 데이터를 처리하는 것은 비용이 많이 듭니다.

특정 형식의 메시지

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:Body> 
      <ns1:myTestServiceOperation xmlns:ns1="http://xmlns.myenterprise.com/myenterprise/myTestWebService/types/"> 
      <UserInfo> 
       <BioData> 
        <FirstName>John</FirstName> 
        <LastName>Smith</LastName> 
        <SSN>123-34-567</PersonNumber> 
        <DateOfBirth>09/01/1980</DataOfBirth> 
       </BioData> 
       <EducationalInfo> 
        <Qualification>Master of Science</Qualification> 
        <Institute>ABC</Institure>  
        <CourseDuration>2 Years</CourseDuration>    
       </EducationalInfo> 
       <EmploymentInfo> 
       <JobTile>Administrator</JobTitle> 
       <Employer>XYZ Corp</Employer> 
       <EmploymentInfo> 
      </UserInfo> 
     </ns1:myTestServiceOperation> 
     </soap:Body> 
</soap:Envelope> 

일반 형식의 메시지

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <ns1:myTestServiceOperation xmlns:ns1="http://xmlns.myenterprise.com/myenterprise/myTestWebService/types/"> 
     <Record category="BioData"> 
       <Property name="FirstName" value="John"/> 
       <Property name="LastName" value="Smith"/> 
       <Property name="SSN" value="123-34-567"/> 
     </Record> 
     <Record category="Education"> 
       <Property name="Qualification" value="Master of Science"/> 
       <Property name="Institute" value="ABC"/> 
       <Property name="CourseDuration" value="2 Years"/> 
     </Record> 
     <Record category="Employment"> 
       <Property name="JobTile" value="Manager"/> 
       <Property name="XYZ Corp" value="XYZ Corp"/> 
       <Property name="CourseDuration" value="2 Years"/> 
     </Record>  
    </ns1:myTestServiceOperation> 
    </soap:Body> 
</soap:Envelope> 

답변

1

등의 응답으로, 서비스에 대한 일반적인 스키마의 경우 소수를 제외하고, 나쁜 생각 갖는 데이터베이스 쿼리 (다른 테이블과 다른 열을 쿼리하는 데 사용되는 동일한 서비스)

빈번하게 스키마가 변경 될 확률은 소비자가 생산자보다 더 많이 영향을받습니다. 따라서 여러 버전의 서비스를 실행하는 것이 좋지만 더 많은 노력이 필요합니다.

그러나 요청 및 응답 변환을 사용하여 하나의 서비스 버전 만 실행하는 방법은 다음과 같습니다.

  1. 이 보내기 최신 요청 버전으로 들어오는 요청을 변환 Contivo 같은
  2. 사용에게 XML 변압기 (XPATH와 함께 그것을해야 스키마에 대한 버전 요소) 들어오는 요청의 버전을 감지 XML을 서비스로 변환하여 응답합니다.
  3. 출력 XML을 요청과 동일한 이전 버전으로 변환하고 클라이언트에 다시 보냅니다.

  1. 클라이언트는 스키마 버전을 최신 버전으로 1
  2. 변환 요청을 요청을 보냅니다 (12)
  3. 보내기 요청 버전 (12)는
  4. 12
  5. 변환 응답 버전 (12) 응답 버전에 응답 버전 가져 오기 서비스를 말한다 1
  6. 응답 버전 1의 클라이언트에 회신
+0

우리와 동의하십시오 e 절대적으로 선택이 없을 때 이름 값 쌍. – Namphibian