CXF

Inleiding

Apache CXF is gebaseerd op een succesvolle webservice-stack, XFire. Deze pagina laat webservices zien die volgend het code-first principe zijn gebouwd. Voor het bouwen van contract-first webservices bevelen we Spring Webservices aan. 

Een CXF Project

Alhoewel er verschillende manieren zijn om een CXF webservice te maken, maken we in dit voorbeeld gebruik van Maven en het archetype cxf-jaxws-javafirst aangezien dit netjes in de Maven plugin voor Eclipse zit ingebakken (Nexus Indexer). Het resultaat is een Eclipse project met de volgende belangrijke files:

  • web.xml
  • beans.xml
    web.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
    
    
    <web-app>
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>WEB-INF/beans.xml</param-value>
    	</context-param>
    
    	<listener>
    		<listener-class>
    			org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>
    
    	<servlet>
    		<servlet-name>CXFServlet</servlet-name>
    		<display-name>CXF Servlet</display-name>
    		<servlet-class>
    			org.apache.cxf.transport.servlet.CXFServlet
    		</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>CXFServlet</servlet-name>
    		<url-pattern>/*</url-pattern>
    	</servlet-mapping>
    </web-app>

    De web.xml is de standaard J2EE deployment descriptor voor het kunnen deployen van een webapplication (WAR). Deze web.xml verwijst naar de CXFServlet die in staat is om SOAP aanroepen te vertalen (gebruik makend van de annotaties op de class en interface) naar de aanroep van een Java methode. In de web.xml wordt verwezen naar beans.xml, een configuratiebestand van Spring waardoor patterns als Inversion of Control en Dependency Injection kunnen worden toegepast:

beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">


	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<jaxws:endpoint id="helloWorldEndpoint"
		implementor="nl.han.ica.ddoa.workshop.service.HelloWorldImpl" address="/HelloWorld" />
	<jaxws:endpoint id="gridServiceEndpoint" implementor="#gridService"
		address="/GridService">
	</jaxws:endpoint>

	<bean id="gridService" class="nl.han.ica.ddoa.workshop.service.GridServiceImpl">
		<property name="gridDAO" ref="gridDAO" />
	</bean>
	<bean id="gridDAO" class="nl.han.ica.ddoa.workshop.dao.GridDAOImpl" />
</beans>

In deze beans,xml staan twee webservice endpoints gedefinieerd. De WSDL is opvraagbaar via http://servernaam:poort/projectnaam/endpointaddress?wsdl, bijvoorbeeld: http://localhost:8080/WSSpringHibernate-0.0.1-SNAPSHOT/GridService?wsdl.&nbsp;

Het vervolgens implementeren van de webservice is betrekkelijk eenvoudig, maak een Java-interface en implementeer deze:

GridService.java
package nl.han.ica.ddoa.workshop.service;

import java.util.List;

import javax.jws.WebService;

import nl.han.ica.ddoa.workshop.domain.Grid;

@WebService
public interface GridService {
    List<Grid> getGrids();
}

 

GridServiceImpl.java
package nl.han.ica.ddoa.workshop.service;

import java.util.List;

import javax.jws.WebService;

import nl.han.ica.ddoa.workshop.dao.GridDAO;
import nl.han.ica.ddoa.workshop.domain.Grid;

@WebService(endpointInterface = "nl.han.ica.ddoa.workshop.service.GridService")
public class GridServiceImpl implements GridService {
    private GridDAO gridDAO;

    public List<Grid> getGrids() {
        return gridDAO.findAll();
    }

    public GridDAO getGridDAO() {
        return gridDAO;
    }

    public void setGridDAO(GridDAO gridDAO) {
        this.gridDAO = gridDAO;
    }
}

De implementatie maakt gebruik van een zgn. DataAccessObject (DAO ) die met Spring geinjecteerd wordt. 

Labels

webservices webservices Delete
apache apache Delete
cxf cxf Delete
spring spring Delete
dao dao Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.