<?xml version="1.0" encoding="utf-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
     http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->

<faqs title="Frequently Asked Questions" toplink="false">
	<part id="sdk"> 
		<title>General</title>
		<faq id="sdk-examples"> 
			<question>Where can I find examples for using Wink?</question> 
			<answer> 
				<p> 
					Wink distributions comes bundled with several examples ilustarting how to use the server and client. <br/>
					All the examples are located in the <code>Wink/examples</code> directory of the distribution zip.
				</p> 
			</answer> 
		</faq>
		<faq id="sdk-spring"> 
			<question>Does Wink have an integration with spring? Can I expose my REST services using Spring Remoting?</question> 
			<answer> 
				<p> 
					Yes, it provides an extension module with the Spring integration. 
					However, Wink doesn't use Spring Remoting.
				</p> 
			</answer> 
		</faq>
		<faq id="sdk-struts"> 
			<question>Is there an integration with Struts?</question> 
			<answer> 
				<p> 
					Wink does not have an integration with struts.
				</p> 
			</answer> 
		</faq>
		<faq id="sdk-struts-usage"> 
			<question>Can Wink be used in the same WAR with Struts?</question> 
			<answer> 
				<p> 
					Yes, Wink and the code you develop over it can be used inside any WAR.
				</p> 
			</answer> 
		</faq>
		<faq id="sdk-tested-with-other-clients"> 
			<question>Have you tested consuming REST resources developed using Wink from a REST client developed using other tools?</question> 
			<answer> 
				<p> 
					Sure. We have tested it from variety of clients including IE, Firefox, Outlook, Apache Abdera, Sun Rome, etc.
				</p> 
			</answer> 
		</faq>
		<faq id="sdk-query-parameters"> 
			<question>Does Wink query parameters?</question> 
			<answer> 
				<p> 
					Absolutely.
				</p> 
			</answer> 
		</faq>
		<faq id="sdk-ide-plugin"> 
			<question>Are there any plans for developing an IDE plugin wrapper for Wink?</question> 
			<answer> 
				<p> 
					We are considering this option for the Eclipse IDE.
				</p> 
			</answer> 
		</faq>
	</part>
	<part id="sdk-building">
		<title>Building the Apache Wink</title>
		<faq id="maven-version"> 
			<question>What version of Maven is used to build Wink?</question> 
			<answer> 
				<p> 
					Wink is built using Maven 2, version 2.0.9.
				</p> 
			</answer> 
		</faq>
		<faq id="maven-sources"> 
			<question>Where can I read about Maven?</question> 
			<answer> 
				<p> 
					Maven site: <a href="http://maven.apache.org">http://maven.apache.org</a><br/>
					Maven FAQ: <a href="http://docs.codehaus.org/display/MAVENUSER/FAQs-1">http://docs.codehaus.org/display/MAVENUSER/FAQs-1</a>
				</p> 
			</answer> 
		</faq>
		<faq id="build-oom"> 
			<question>I am getting an OutOfMemoryException when performing a full build</question> 
			<answer> 
				<p> 
					If you are getting OutOfMemoryException when attempting a full
					build, you may try increasing the max heap and the PermGen space sizes. 
					Either export a MAVEN_OPTS variable in your shell or add it to the original mvn script. 
					<br/>
					<pre>MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m</pre>
				</p> 
			</answer> 
		</faq>
		<faq id="build-offline"> 
			<question>Can I build the sources if I am not connected to the network?</question> 
			<answer> 
				<p> 
					If you know your downloads are up-to-date, you can use the offline option 
					which may speed up your build considerably depending on network latency:
					<pre>mvn -o</pre>
				</p> 
			</answer> 
		</faq> 
		<faq id="build-tests"> 
			<question>Some tests fail during the build. Where can I see what happened?</question> 
			<answer> 
				<p> 
					Surefire, which is the default Maven test runner, outputs all tests reports
					as a set of xml and text files to the <code>target/surefire-reports</code> directory. 
					Any test failure details and stacktraces end up in those files, but not in the console. 
					The output can be temporarily redirected to the console by adding the following option:
					<pre>mvn -Dsurefire.useFile=false</pre>
				</p> 
			</answer> 
		</faq> 
	</part> 
</faqs> 
