Ce contenu n'est pas disponible dans la langue sélectionnée.
Chapter 4. Deploying an Apache CXF Web Service
Abstract
4.1. Apache CXF Example Copier lienLien copié sur presse-papiers!
Overview Copier lienLien copié sur presse-papiers!
url-pattern setting from web.xml, and the address attribute of the Web services endpoint are combined to give the URL, http://localhost:8080/wsdl_first/services/CustomerServicePort.
Figure 4.1. Example Web Service Deployed in a Web Server
wsdl_first sample Copier lienLien copié sur presse-papiers!
samples/wsdl_first directory. For details of how to install the Apache CXF distribution, see the section called “Install Apache CXF”.
web.xml file Copier lienLien copié sur presse-papiers!
web.xml file. In the wsdl_first project, the web.xml file is stored at the following location:
wsdl_first/src/main/webapp/WEB-INF/web.xml
web.xml file.
Example 4.1. web.xml File for the wsdl_first Example
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>cxf</display-name>
<servlet>
<servlet-name>cxf</servlet-name>
<display-name>cxf</display-name>
<description>Apache CXF Endpoint</description>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
web.xml file are:
- Servlet class—specifies the
org.apache.cxf.transport.servlet.CXFServletclass, which implements a special servlet that integrates with Web services. - URL pattern—determines which URLs are routed to this servlet. In general, the servlet URL has the following form:
http://Host:Port/WARFileName/URLPatternWhere the base URL,http://Host:Port, is determined by the configuration of the Web server, theWARFileNameis the root of theWARFileName.warWAR file, and theURLPatternis specified by the contents of theurl-patternelement.Assuming that the Web server port is set to 8080, thewsdl_firstexample servlet will match URLs of the following form:http://localhost:8080/wsdl_first/services/*
Implied Spring container Copier lienLien copié sur presse-papiers!
CXFServlet automatically creates and starts up a Spring container, which you can then use for defining Web service endpoints. By default, this Spring container automatically loads the following XML file in the WAR:
WEB-INF/cxf-servlet.xml
wsdl_first example project, this file is stored at the following location:
wsdl_first/src/main/webapp/WEB-INF/cxf-servlet.xml
cxf-servlet.xml file Copier lienLien copié sur presse-papiers!
cxf-servlet.xml file is primarily used to create Web service endpoints, which represent the Web services exposed through the Web server. Apache CXF provides a convenient and flexible syntax for defining Web service endpoints in XML and you can use this flexible syntax to define endpoints in cxf-servlet.xml.
cxf-servlet.xml file, which creates a single CustomerService endpoint, using the jaxws:endpoint element.
Example 4.2. Spring Configuration for the wsdl_first Example
<?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"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<jaxws:endpoint
xmlns:customer="http://customerservice.example.com/"
id="CustomerServiceHTTP"
address="/CustomerServicePort"
serviceName="customer:CustomerServiceService"
endpointName="customer:CustomerServicePort"
implementor="com.example.customerservice.server.CustomerServiceImpl">
<!--jaxws:properties>
<entry key="schema-validation-enabled" value="true" />
</jaxws:properties-->
</jaxws:endpoint>
</beans>
address attribute of the jaxws:endpoint specifies the final segment of the Web service's URL. When you put together all of the settings from the Web server, the web.xml file, and the cxf-server.xml file, you obtain the following URL for this Web service endpoint:
http://localhost:8080/wsdl_first/services/CustomerServicePort
WSDL address configuration Copier lienLien copié sur presse-papiers!
web.xml, and the Spring configuration, cxf-servlet.xml, it is also necessary to ensure that the SOAP address in the WSDL contract is correctly specified, so that it matches the URL for this Web service.
wsdl_first example, the WSDL contract is located in the following file:
wsdl_first/src/main/resources/CustomerService.wsdl
location attribute of the soap:address element must be set to the correct Web service URL, as shown in Example 4.3, “Address in the WSDL CustomerService Contract”.
Example 4.3. Address in the WSDL CustomerService Contract
<?xml version="1.0" encoding="UTF-8"?>
...
<wsdl:definitions name="CustomerServiceService" targetNamespace="http://customerservice.example.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://customerservice.example.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
...
<wsdl:service name="CustomerServiceService">
<wsdl:port name="CustomerServicePort" binding="tns:CustomerServiceServiceSoapBinding">
<!-- embedded deployment -->
<!--soap:address location="http://localhost:9090/CustomerServicePort"/-->
<!-- standalone Tomcat deployment -->
<soap:address location="http://localhost:8080/wsdl_first/services/CustomerServicePort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>