달력

52024  이전 다음

  • 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
1. XML 데이터
<PARENT>
    <HEAD>
        <RESULT_CODE>00001</RESULT_CODE>
        <RESULT_MESSAGE>success</RESULT_MESSAGE>
    </HEAD>
    <BODY>
        <STATUS>true</STATUS>
    </BODY>
</PARENT>

2. Bean 설정
<bean id="unmarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="aliases">
        <props>
            <prop key="PARENT">kr.or.openframework.model.Parent</prop>
        </props>
    </property>
    <property name="autodetectAnnotations" value="true" />
</bean>

3. Repository 소스
@Repository
public class ParentRepository {
    @Resource(name = "unmarshaller")
    private Unmarshaller unmarshaller;
   
    public Object xmlToObject(URL url) {
        InputStream urlInputStream = null;
        try {
            urlInputStream = url.openConnection().getInputStream();
            return unmarshaller.unmarshal(new StreamSource(urlInputStream));
        } catch (IOException e) {
        } finally {
            if (urlInputStream != null) {
                try {
                    urlInputStream.close();
                } catch (IOException e) {
                }
            }
        }
    }
}

4. 모델 클래스
package kr.or.openframework.model;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("PARENT")
public class Parent {
    @XStreamAlias("HEAD")
    private Head head;
    @XStreamAlias("BODY")
    private Body body;

    public Head getHead() {
        return head;
    }

    public void setHead(Head head) {
        this.head = head;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }
}

@XStreamAlias("HEAD")
class Head extends BaseModel {
    @XStreamAlias("RESULT_CODE")
    private String resultCode;
    @XStreamAlias("RESULT_MESSAGE")
    private String resultMessage;

    public String getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMessage() {
        return resultMessage;
    }

    public void setResultMessage(String resultMessage) {
        this.resultMessage = resultMessage;
    }
}
@XStreamAlias("BODY")
class Body {
    @XStreamAlias("STATUS")
    private String status;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status= status;
    }
}

5. 결과 출력
kr.or.openframework.model.Parent@e72f0c[
  head=kr.or.openframework.model.Head@12eabae[ 
  resultCode=00001
  resultMessage=success
]
  body=kr.or.openframework.model.Body@10948cf[
  status=true
]
]


Posted by fromm0
|
Spring이 버전을 업그레이드하면서 문서를 보면 역시 아쉬운 건 실제 적용된 샘플 소스인거 같습니다.
그래서인지 Spring사이트에서도 간단한 샘플을 이미 제공하고 있는데요..
주소가 https://src.springframework.org/svn/spring-samples/ 입니다.



좀더 다양하게 연동되어 완성된 애플리케이션 샘플이야 AppFuse를 보면 되지만, 특정 부분만 바로 파악하기 위해서는 아무래도 해당 부분만 적용된 샘플이 아쉬울수 밖에 없다고 보여지네요.

근데 이 샘플 소스를 받아 돌려도면 간혹 아래와 같은 에러가 발생합니다.

# 에러 메시지
org.apache.jasper.JasperException: Unable to read TLD "META-INF/c.tld" from JAR file "file:/D:/MyLucy/workspace/SPRING_SAMPLE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/mvc-basic/WEB-INF/lib/jstl-1.2.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV

# 에러 메시지 화면


해결하기 위해서는 WEB-INF/lib 아래 Tomcat이 가지는 jar파일과 중복되는 두가지 파일을 지워주시면 됩니다.
WAS가 Tomcat이 아니라면 다른 에러가 뜰수도 있겠네요. ^^






Posted by fromm0
|