RESTful Web Service mit Apache Wink in WebLogic Portal
Mittlerweile sind für Java einige REST-Frameworks vorhanden zu den bekanntesten zählen sicherlich Jersey [1], Restlet [2], REST in Spring 3 [3] und Apache Wink [4]. All jene Frameworks implementieren die Java API für RESTful Web Services, kurz JAX-RS, welche unter anderem durch Annotation eine einfache Handhabung von Parametern, Pfaden und HTTP-Methoden ermöglicht.
Bei der Entwicklung für WebLogic Portal 10.3.2 ergibt sich das Problem, dass die verwendete Spring-Version REST noch nicht unterstützt. Auch die Frameworks Jersey und Restlet können aufgrund von Inkompatibilitäten mit WebLogic eigenen Bibliotheken nicht ohne weiteres in einem Portal-War eingebunden werden.
Apache Wink stellt als leichtgewichtiges (und darüber hinaus sehr performantes Framework [5]) eine ideale Möglichkeit dar, um innerhalb eines WebLogic Portals REST Web Services zu implementieren. Durch die einfache Integration in Spring kann auch innerhalb des eigens implementierten RESTful Wen Service auf die Vorzüge von Autowiring und ähnlichem zurückgegriffen werden.
Konfiguration
Die nötigen Konfigurationen befinden sich in der web.xml, in welcher der Spring-Context und das Servlet definiert werden.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:META-INF/server/wink-core-context.xml
/WEB-INF/application-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>restServlet</servlet-name>
<servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>restServlet</servlet-name>
<url-pattern>/restapi/*</url-pattern>
</servlet-mapping>
In der Spring-Konfiguration (hier: application-context.xml) muss nur noch die Bean, die die Implementierung des REST Services darstellt, angegeben werden.
<bean id="resource.exensioRestService" class="servlet.rest.ExensioRestService"></bean>
<bean class="org.apache.wink.spring.Registrar">
<property name="classes">
<set value-type="java.lang.Class"></set>
</property>
<property name="instances">
<set>
<ref local="resource.exensioRestService">
</ref></set>
</property>
</bean>
Die Service-Klasse könnte wie folgt aussehen:
@Path("exensioService")
@Component
public class ExensioRestService {
@Autowired
private exensioTestServiceBusiness exensioTestService;
@GET
@Produces("text/plain")
public String getStartingInfo() {
return "This is an example output if no parameter and no extra path are given. "
}
@GET
@Produces("text/plain")
@Path("/name/{id}")
public String getName(@PathParam("id") Long id) {
return exensioTestService.getNameForId(id);
}
}
Die Aufrufe dieses Services lauten:
http://host:port/exensioWar/restapi/exensioService/
http://host:port/exensioWar/restapi/exensioService/name/12
Fazit
Apache Wink ist ein einfach zu verwendendes REST-Framework mit JAX-RS und Spring-Unterstützung, welches sich problemlos in Projekten mit WebLogic Server und WebLogic Portal integrieren lässt.