<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>restlet - Naver Ending Study</title>
	<atom:link href="https://nangchang.nes.or.kr/tag/restlet/feed/" rel="self" type="application/rss+xml" />
	<link>https://nangchang.nes.or.kr</link>
	<description></description>
	<lastBuildDate>Fri, 22 Jun 2012 11:51:31 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8</generator>
	<item>
		<title>Android 에서 Restlet Net extension HTTP client connector 사용 시 timeout 설정</title>
		<link>https://nangchang.nes.or.kr/android-%ec%97%90%ec%84%9c-restlet-net-extension-http-client-connector-%ec%82%ac%ec%9a%a9-%ec%8b%9c-timeout-%ec%84%a4%ec%a0%95/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-%25ec%2597%2590%25ec%2584%259c-restlet-net-extension-http-client-connector-%25ec%2582%25ac%25ec%259a%25a9-%25ec%258b%259c-timeout-%25ec%2584%25a4%25ec%25a0%2595</link>
					<comments>https://nangchang.nes.or.kr/android-%ec%97%90%ec%84%9c-restlet-net-extension-http-client-connector-%ec%82%ac%ec%9a%a9-%ec%8b%9c-timeout-%ec%84%a4%ec%a0%95/#respond</comments>
		
		<dc:creator><![CDATA[낭창]]></dc:creator>
		<pubDate>Fri, 22 Jun 2012 11:51:31 +0000</pubDate>
				<category><![CDATA[프로그래밍 이야기]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[restlet]]></category>
		<guid isPermaLink="false">http://nangchang.nes.or.kr/?p=484</guid>

					<description><![CDATA[<p>&#160;결론부터 말하자면 라이브러리 버그랄까&#8230; 안드로이드에서는 net extension의 HTTP client connector를 사용하면connection timeout 과 read timeout을 설정해도 적용이 안된다. Resetlet 문서를 보면 Internal Connector의 HTTP connector는 development only 를 추천한다고 당당히 써 있기도 한데다가서버 다운으로 접속이 안될 때 자꾸 문제를 있으켜서 Net extention의 HTTP connector를 쓰기로 했다. 안드로이드에서는 자동으로 쓸수 있게 하는게 안된다는거 같고.. 다음과 같이 [&#8230;]</p>
<p>The post <a href="https://nangchang.nes.or.kr/android-%ec%97%90%ec%84%9c-restlet-net-extension-http-client-connector-%ec%82%ac%ec%9a%a9-%ec%8b%9c-timeout-%ec%84%a4%ec%a0%95/">Android 에서 Restlet Net extension HTTP client connector 사용 시 timeout 설정</a> first appeared on <a href="https://nangchang.nes.or.kr">Naver Ending Study</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;결론부터 말하자면 라이브러리 버그랄까&#8230;</p>
<p>안드로이드에서는 net extension의 HTTP client connector를 사용하면<br />connection timeout 과 read timeout을 설정해도 적용이 안된다.</p>
<p>Resetlet 문서를 보면 Internal Connector의 HTTP connector는 <br />development only 를 추천한다고 당당히 써 있기도 한데다가<br />서버 다운으로 접속이 안될 때 자꾸 문제를 있으켜서 Net extention의 HTTP connector를 쓰기로 했다.</p>
<p>안드로이드에서는 자동으로 쓸수 있게 하는게 안된다는거 같고.. 다음과 같이 해줘야 한다.</p>
<blockquote><p><span class="Apple-tab-span" style="white-space: pre; ">		</span>final Engine engine = Engine.getInstance();<br /><span class="Apple-tab-span" style="white-space: pre; ">		</span>engine.getRegisteredClients().clear();<br /><span class="Apple-tab-span" style="white-space: pre; ">		</span>engine.getRegisteredClients().add(new HttpClientHelper(null));</p></blockquote>
<p>그리고, read timeout 과 connection timeout을 설정하고, ClientResource에서 <br />해당 client를 사용하도록 설정해 준다.</p>
<p></p>
<blockquote><p><span class="Apple-tab-span" style="white-space: pre; ">		</span>final Context context = new Context();</p>
<p><span class="Apple-tab-span" style="white-space: pre; ">		</span>final Series&lt;Parameter&gt; parameters = context.getParameters();<br /><span class="Apple-tab-span" style="white-space: pre; ">		</span>parameters.add(&#8220;readTimeout&#8221;, Integer.toString(READ_TIMEOUT));<br /><span class="Apple-tab-span" style="white-space: pre; ">		</span><br /><span class="Apple-tab-span" style="white-space: pre; ">		</span>final Client client = new Client(context, Protocol.HTTP);<br /><span class="Apple-tab-span" style="white-space: pre; ">		</span>client.setConnectTimeout(CONNECTION_TIMEOUT);</p>
<p><span class="Apple-tab-span" style="white-space: pre; ">		</span>final ClientResource cr = new ClientResource(requestUrl);<br /><span class="Apple-tab-span" style="white-space: pre; ">		</span>cr.setNext(client);</p></blockquote>
<p>그런데, timeout이 전혀 안먹는다=_=<br />설정하는 방법이 잘못됐나 싶어 온갖 삽질을 동원하며 이리저리 테스트 해도 답이 나오질 않는다..<br />그래서, 결국 Restlet 소스를 뒤지기 시작했다.<br />(라이브러리 소스나 뒤지는 신세라니&#8230; OTL)</p>
<p>마침내 찾아낸 부분은&#8230; org/restlet/ext/net/internal/HttpUrlConnectionCall.java 파일의</p>
<blockquote><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // These properties can only be used with Java 1.5 and upper<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // releases<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int majorVersionNumber = SystemUtils.getJavaMajorVersion();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int minorVersionNumber = SystemUtils.getJavaMinorVersion();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((majorVersionNumber &gt; 1)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || ((majorVersionNumber == 1) &amp;&amp; (minorVersionNumber &gt;= 5))) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.connection.setConnectTimeout(getHelper()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .getConnectTimeout());<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.connection.setReadTimeout(getHelper().getReadTimeout());<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p></blockquote>
<p>JDK 버전을 체크해서 1.5 이상 일때만 timeout을 설정하도록 하는 부분이었다.<br />먼가 의심스러워서, 안드로이드에서 버전값을 찍어 봤다.<br />&#8230; 둘다 0 이 나온다..=_=<br />이건 내가 잘못한건지 쟤들이 안드로이드용이라면서 안드로이드 고려를 못한건지&#8230;<br />도저히 판단이 안서는 상황이지만, 구국의 결단을 내려 라이브러리 소스를 직접 컴파일해 쓰기로 결정;;</p>
<blockquote><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.connection.setConnectTimeout(getHelper()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .getConnectTimeout());<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.connection.setReadTimeout(getHelper().getReadTimeout());</p></blockquote>
<p>요렇게 고쳐서 해결을 봐버렸다=_=</p>
<p></p><p>The post <a href="https://nangchang.nes.or.kr/android-%ec%97%90%ec%84%9c-restlet-net-extension-http-client-connector-%ec%82%ac%ec%9a%a9-%ec%8b%9c-timeout-%ec%84%a4%ec%a0%95/">Android 에서 Restlet Net extension HTTP client connector 사용 시 timeout 설정</a> first appeared on <a href="https://nangchang.nes.or.kr">Naver Ending Study</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://nangchang.nes.or.kr/android-%ec%97%90%ec%84%9c-restlet-net-extension-http-client-connector-%ec%82%ac%ec%9a%a9-%ec%8b%9c-timeout-%ec%84%a4%ec%a0%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
