Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.Dieser Inhalt ist in der von Ihnen ausgewählten Sprache nicht verfügbar.
Chapter 4. Deploying an Apache CXF Web Service
Abstract
4.1. Apache CXF Example
Overview
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
samples/wsdl_first
directory. For details of how to install the Apache CXF distribution, see the section called “Install Apache CXF”.
web.xml file
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.CXFServlet
class, 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/URLPattern
Where the base URL,http://Host:Port
, is determined by the configuration of the Web server, theWARFileName
is the root of theWARFileName.war
WAR file, and theURLPattern
is specified by the contents of theurl-pattern
element.Assuming that the Web server port is set to 8080, thewsdl_first
example servlet will match URLs of the following form:http://localhost:8080/wsdl_first/services/*
Implied Spring container
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
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
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>