아래의 소스 코드에는 다음과 같은 기능이 포함되어 있다.
- get / post 방식 통신
- JSESSIONID 쿠키 사용 (응답메시지, 요청메시지에서 사용)
- XML 응답 받아서 마샬링
- POST 방식의 UrlEncodedFormEntity 만들어서 요청보내기
package jaxrs;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StringWriter;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.xml.transform.stream.StreamSource;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.cookie.Cookie;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cxfbook.chapter4.domain.Book;
import cxfbook.chapter4.domain.BookCollection;
@ContextConfiguration(locations={"classpath*:spring/*-config.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class CallJaxrsTest {
@Resource(name="jaxb2Marshaller")
private Jaxb2Marshaller marshaller;
@Test
public void testCallJaxrs() throws Exception {
URI uri = URIUtils.createURI("http", "localhost", 8080, "/chapter4/rest/user/book/tom/list", null, null);
HttpGet get = new HttpGet(uri);
get.addHeader("Accept", "application/xml");
System.out.println("uri: " + uri);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(get);
HttpEntity entity = response.getEntity();
BookCollection books = (BookCollection)
marshaller.unmarshal(new StreamSource(entity.getContent()));
for(Book book : books.getBooks()) {
System.out.println("book: " + book);
}
}
@Test
public void testCallSecureService() throws Exception {
URI uri = URIUtils.createURI("http", "localhost", 8080, "/securityweb/login.do", null, null);
List parameters = new ArrayList();
parameters.add(new BasicNameValuePair("loginId", "tom"));
parameters.add(new BasicNameValuePair("password", "tomspasswd"));
UrlEncodedFormEntity reqEntity = new UrlEncodedFormEntity(parameters);
HttpPost post = new HttpPost(uri);
post.setEntity(reqEntity);
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(post);
System.out.println("params: " + post.getParams());
System.out.println("loginId: " + post.getParams().getParameter("loginId"));
System.out.println("password: " + post.getParams().getParameter("password"));
String jsessionId = null;
Cookie jsessionIdCookie = null;
for(Cookie cookie : httpclient.getCookieStore().getCookies()) {
System.out.println(cookie.getName() + " : " + cookie.getValue() + " - " + cookie.isExpired(new Date()));
if("JSESSIONID".equals(cookie.getName())) {
if(cookie.isExpired(new Date()) == false) {
jsessionId = cookie.getValue();
jsessionIdCookie = cookie;
}
}
}
System.out.println("JSESSIONID: " + jsessionId);
HttpEntity entity = response.getEntity();
ByteArrayOutputStream out = new ByteArrayOutputStream();
entity.writeTo(out);
System.out.println(new String(out.toByteArray()));
System.out.println("uri: " + uri);
if(jsessionId == null) {
return;
}
System.out.println("jsessionId cookie: " + jsessionIdCookie.getClass().getName());
System.out.println("jsessionId cookie: " + jsessionIdCookie);
ObjectOutputStream cookieOutputStream = new ObjectOutputStream(new FileOutputStream("cookie.bin"));
cookieOutputStream.writeObject(jsessionIdCookie);
HttpGet get = new HttpGet("http://localhost:8080/securityweb/ws/rest/secure/user/getUser/1");
ObjectInputStream cookieInputStream = new ObjectInputStream(new FileInputStream("cookie.bin"));
jsessionIdCookie = (Cookie) cookieInputStream.readObject();
CookieStore cookieStore = new BasicCookieStore();
cookieStore.addCookie(jsessionIdCookie);
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
response = httpclient.execute(get, localContext);
entity = response.getEntity();
out = new ByteArrayOutputStream();
entity.writeTo(out);
System.out.println(new String(out.toByteArray()));
}
}