아래 블로그에 작성한 JAXB HttpClient 코드를 Spring OXM으로 수정해서 돌려보았다. 비교해볼만함
http://knight76.tistory.com/entry/JAXB-Http-Client-Example샘플
특정 URL을 호출하면 사원 정보가 나온다고 가정한다.
<ROOT> <EMPLOYEE> <id></id> <nm></nm> …. </EMPLOYEE> <EMPLOYEE> <id></id> <nm></nm> …. </EMPLOYEE> </ROOT> |
# ROOT.java
package spring; import java.util.ArrayList; import javax.xml.bind.annotation.XmlAccessType; @XmlRootElement(name="ROOT") public Root() { public List<Employee> getEmployees() { public void setEmployees(List<Employee> employees) { } |
# Employee.java
package test; public class Employee { private String id; …. … // set, get } |
# XEmployee.java
public class XEmployee { private static List<String> employeeList; employeeList.add("aaa"); … } |
여기까지는 바뀌는 것이 없다. Spring 연동 코드가 바뀌었다. 연동코드는 형광펜으로 칠해놨다.
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <oxm:jaxb2-marshaller id="jaxb2Marshaller"> <bean id="application" class="spring.CheckEmp"> </beans> |
main 메서드
package spring; import java.io.BufferedReader; import javax.annotation.Resource; import org.apache.http.HttpEntity; public class CheckEmp { @Resource(name = "jaxb2Marshaller") public void setUnmarshaller(Unmarshaller unmarshaller) { public static void main(String[] args) throws Exception { private void start() throws Exception { Root root = getRoot(reader); for (String retiredEmpID : XEmployee.getEmployeeList()) { private Root getRoot(BufferedReader reader) throws Exception { private BufferedReader connectURL() throws IOException, HttpResponse response = httpclient.execute(httpget); private static void saveFile(BufferedReader reader) throws IOException { } |
삽질 방지를 위해서 spring debug log가 출력되게 한다.
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <logger name="com" additivity="false"> <logger name="org.springframework" additivity="false"> <root> |
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <properties> <dependencies> <dependency> </project> |
# 참조한 내용
Spring OXM 에 대한 자료 (Marshalling XML using O/X Mappers)
http://static.springsource.org/spring-ws/site/reference/html/oxm.html
# 기타
@Resource annotation은 javax.annotation으로 플랫폼 독립적이며, jsr250에서 DI 의 리더들이 모여서 결정했다. jsr250-api.jar 를 반드시 pom.xml에 넣어야 한다.
<
dependency
>
<
groupId
>javax.annotation</
groupId
>
<
artifactId
>jsr250-api</
artifactId
>
<
version
>1.0</
version
>
</
dependency
>
name속성에 자동으로 연결될 빈객체의 이름을 입력한다
@Resource(name="marshaller")
Marshaller marshaller;
# CheckEmp.java 코드를 Spring JUnit으로 만들기
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml"})
public class CheckEmp {
// 코드
@Test
public void testMarshaller() throws Exception {
...
}
}
'general java' 카테고리의 다른 글
Common CLI 와 Properties 사용 예제 (0) | 2012.02.17 |
---|---|
JVisualvm 맛보기 용하기 (0) | 2012.02.16 |
JAXB / Http Client unmarshaller example(샘플) (0) | 2012.02.14 |
주키퍼(zookeeper) 에서 cpu 튀는 현상… (java nio, 통신) (0) | 2012.02.03 |
org.springframework.web.servlet.DispatcherServlet noHandlerFound 문제 해결 (1) | 2012.01.25 |