이미 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);
}
}
댓글 없음:
댓글 쓰기