블로그 이미지
Max.

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Notice

'Dozer'에 해당되는 글 1

  1. 2010.12.10 Spring + Jersey + Dozer 예제
2010.12.10 20:09 개발관련
생각나는 김에 올린다. 요즘 정신없이 개발하고 있어서 하루가 금방이다. 거의 방치수준의 블로그를 이런식으로라도 유지하려는...;;; 아무튼, 제목 그대로 저 두개를 이용하여 객체를 반환하는 예제이다. 이것이 필요한 이유는, 웹서비스를 처리하는 그룹과 그것을 이용하는 그룹이 분리되어 있다면, 서로 다른 목적의 객체에 담기는게 유리하다. 그때 각각의 객체에 값을 이동할 필요가 있는데, 이렇게 복사해(매핑해) 주는 것이 Dozer다. 아래는 그 예제를 순서적으로 기록한 것이다.

1) Response 객체 (jersey 에서 사용)
@XmlType
@MappedSuperclass
@XmlRootElement(name="RESULT")
public class AccountResponse {
@XmlElement(name="RESULT_CODE")
private String resultCode;
@XmlElement(name="COUNT")
private int count;
@XmlElement(name="LINK_URL")
private String linkUrl;
...

2) DTO 객체
public class AccountResult {
private Long count;
private String linkUrl;
...

3) Dozer 매핑 설정
...
  <mapping map-id="ws_account"> 
    <class-a>kr.company.ws.model.AccountResponse</class-a>
    <class-b>kr.company.service.model.AccountResult</class-b>   
    <field custom-converter="kr.company.service.model.converter.IntToLongConverter">
      <a>count</a>
      <b>count</b>
    </field>
    <field>
      <a>linkUrl</a>
      <b>linkUrl</b>
    </field>
  </mapping> 
[Converter] 
public class IntToLongConverter implements CustomConverter {
@Override
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
Integer id = (Integer) sourceFieldValue;
return Long.valueOf(id);
}
}

4) Spring 설정
...
<bean id="dozerMapper" class="org.dozer.DozerBeanMapper">
   <property name="mappingFiles">
       <list>
           <value>META-INF/spring/dozer-bean-mappings.xml</value>
       </list>
   </property>
</bean>

4) 서비스 호출
public class AccountServiceProviderImpl ...
@Override
public AccountResult findAccount(Long id) {
AccountResponse accountResponse = accountWebService.findAccount(id);
return dozerMapper.map(accountResponse, AccountResult.class,"ws_account");
}
...

5) 테스트
    @Test
    public void 테스트(){
         ...

     AccountResult accountResult = accountServiceProvider.findAccount(account.getId());
     assertNotNull(accountResult);
    }

따로 설명없이 순서적으로 보면, 이해될수 있을 정도로 쉽다. Dozer를 몇년전에 시도 했을때는 설정이 복잡해 보였는데, 다시 해보니, 복잡하지도 않고 쓸만하다. 오히려 jersey설정이 더 복잡해 보인다. 그래도 jersey역시 쉽다.

저작자 표시
신고
posted by Max.
prev 1 next