이미 WebService를 사용하기 위해서 JAXB 애너테이션을 사용하고 있는 경우라면
더욱 사용하기가 용이하다.
다음은 User 객체를 XML로 마샬링하는 방법과 XML을 User객체로 언마샬링하는 방법을 보여주는 간단한 예제다.
/spring/context-oxm.xml 예제
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oxm="http://www.springframework.org/schema/oxm" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-1.5.xsd"> <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> <property name="classesToBeBound"> <list> <value>sample.maven.jaxws.User</value> </list> </property> </bean> </beans>
아래의 소스는 사용자 정보를 담고 있는 Jaxb 클래스다.
CXF에서 XmlType 애너테이션만 설정하면 WSDL이 생성되는 것과는 달리
Jaxb2Marshaller에서는 XmlRootElement 애너테이션을 반드시 설정해 주어야 한다.
User 클래스
package sample.maven.jaxws; import java.sql.Timestamp; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlType @XmlRootElement(name="user", namespace="org.sds.sample") public class User { private long userId; private String loginId; private String userName; private Timestamp createDate; public long getUserId() { return userId; } public void setUserId(long userId) { this.userId = userId; } public String getLoginId() { return loginId; } public void setLoginId(String loginId) { this.loginId = loginId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @XmlJavaTypeAdapter(value=DateTimestampAdapter.class) public Timestamp getCreateDate() { return createDate; } public void setCreateDate(Timestamp createDate) { this.createDate = createDate; } @Override public String toString() { return "User [userId=" + userId + ", loginId=" + loginId + ", userName=" + userName + ", createDate=" + createDate + "]"; } }
아래는 JUnit테이스 케이스다.
User객체를 XML로 마샬링하는 예제와 XML을 User객체로 언마샬링하는 예제가 포함되어 있다.
Jaxb 테스트 케이스
package sample.maven.jaxws; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import javax.annotation.Resource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.oxm.Marshaller; import org.springframework.oxm.Unmarshaller; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @ContextConfiguration(locations={"classpath*:/spring/context-*.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public class UserXomTest { @Resource(name="jaxb2Marshaller") Marshaller marshaller; @Resource(name="jaxb2Marshaller") Unmarshaller unmarshaller; @Test public void testMarshaller() throws Exception { User user = new User(); user.setLoginId("loginId"); ByteArrayOutputStream out = new ByteArrayOutputStream(); StreamResult result = new StreamResult(out); marshaller.marshal(user, result); System.out.println(out.toString()); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); StreamSource source = new StreamSource(in); User newUser = (User) unmarshaller.unmarshal(source); System.out.println("new user: " + newUser); } }
댓글 없음:
댓글 쓰기