cxf的hello world
1.建立一个maven工程,dom.xml。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lzm.cxf</groupId> <artifactId>cxf</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <cxf.version>3.0.1</cxf.version> <spring.version>3.2.10.RELEASE</spring.version> <finalName>cxf.war</finalName> </properties> <dependencies> <!-- <dependency> <groupId>org.apache.cxf</groupId> <artifactId>apache-cxf</artifactId><version>3.0.1</version> <type>pom</type> </dependency> --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <!-- Jetty is needed if you're are not using the CXFServlet --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <build> <!-- 设置war包名称 --> <finalName>${finalName}</finalName> <plugins> <!-- jetty自动部署插件 只支持jdk1.7--> <!-- scanIntervalSeconds设置的是jetty自动扫描的间隔,单位秒 发现有改动自动更新部署,默认为0,即不扫描管理热部署工程。 --> <!-- contextPath配置的是部署后文件夹的名字,也即访问的地址。 例:http://localhost:8080/autoJetty --> <!-- Important: You need to use Maven 3 and Java 1.7 for this plugin. --> <!-- <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.1.v20120215</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> </configuration> </plugin> --> </plugins> </build> </project>
2.cxf可以用2种方式跑,一是用main,一是用web 容器(tomcat)。
如果是用main。
必须保证dom.xml里有以下配置
<!-- Jetty is needed if you're are not using the CXFServlet --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${cxf.version}</version> </dependency>
Server.java
package com.lzm.cxf; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import com.lzm.cxf.service.HelloWorld; import com.lzm.cxf.service.imp.HelloWorldImpl; public class Server { protected Server() throws Exception { /** * simple */ /* System.out.println("Starting Server"); HelloWorldImpl implementor = new HelloWorldImpl(); String address = "http://localhost:9000/helloWorld"; Endpoint.publish(address, implementor);*/ /** * complex */ HelloWorldImpl implementor = new HelloWorldImpl(); int i = 0; JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean(); svrFactory.setServiceClass(HelloWorld.class); svrFactory.setAddress("http://localhost:9000/helloWorld"); svrFactory.setServiceBean(implementor); svrFactory.getInInterceptors().add(new LoggingInInterceptor()); svrFactory.getOutInterceptors().add(new LoggingOutInterceptor()); svrFactory.create(); } public static void main(String args[]) throws Exception { new Server(); System.out.println("Server ready..."); System.in.read(); } }
Client.java
package com.lzm.cxf; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.lzm.cxf.service.Address; import com.lzm.cxf.service.HelloWorld; public class Client { private Client() { } public static void main(String args[]) throws Exception { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setServiceClass(HelloWorld.class); factory.setAddress("http://localhost:9000/helloWorld"); HelloWorld client = (HelloWorld) factory.create(); String reply = client.sayHi("HI"); System.out.println("Server said: " + reply); Address address = client.getAddress(1l); System.out.println(address.getCity()); } }
package com.lzm.cxf.service; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; @WebService public interface HelloWorld { @WebResult(name="result") public String sayHi(@WebParam(name="text") String text); @WebResult(name="result") public Address getAddress(@WebParam(name="id") long id); }
package com.lzm.cxf.service.imp; import java.util.Arrays; import javax.jws.WebService; import com.lzm.cxf.service.Address; import com.lzm.cxf.service.HelloWorld; @WebService(endpointInterface = "com.lzm.cxf.service.HelloWorld", serviceName = "HelloWorld") public class HelloWorldImpl implements HelloWorld { public String sayHi(String text) { System.out.println("sayHi called"); return "Hello " + text; } public Address getAddress(long id) { // TODO Auto-generated method stub Address address = new Address(); address.setCity("city"); address.setCounty("country"); address.setId(1); address.setPhoneNumbers(Arrays.asList(new String[] {"1234567", "2222299"})); return address; } }
package com.lzm.cxf.service; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; /** * * @author bragel * */ @XmlType @XmlAccessorType(XmlAccessType.FIELD) public class Address { @XmlElement(name = "address_id") private int id; @XmlElement(name = "street") private String street; @XmlElement(name = "suite") private String suite; @XmlElement(name = "county") private String county; @XmlElement(name = "city") private String city; @XmlElement(name = "state") private String state; @XmlElement(name = "zip") private String zip; @XmlElementWrapper(name = "phone_numbers") @XmlElement(name = "phone_number") private List<String> phoneNumbers; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getSuite() { return suite; } public void setSuite(String suite) { this.suite = suite; } public String getCounty() { return county; } public void setCounty(String county) { this.county = county; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getZip() { return zip; } public void setZip(String zip) { this.zip = zip; } public List<String> getPhoneNumbers() { return phoneNumbers; } public void setPhoneNumbers(List<String> phoneNumbers) { this.phoneNumbers = phoneNumbers; } }
3.如果是用tomcat跑
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" 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> <description>Apache CXF Endpoint</description> <display-name>cxf</display-name> <servlet-name>cxf</servlet-name> <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-INF/cxf-servlet.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-servlet.xml" /> <bean id="hello" class="com.lzm.cxf.service.imp.HelloWorldImpl" /> <jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" /> </beans>
src/main/resources/client-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/schema/jaxws.xsd"> <bean id="client" class="com.lzm.cxf.service.HelloWorld" factory-bean="clientFactory" factory-method="create" /> <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="com.lzm.cxf.service.HelloWorld" /> <property name="address" value="http://localhost:9002/services/HelloWorld" /> </bean> </beans>
4.用soapUI 4.5.1测试。
WSDL填入http://localhost:9000/helloWorld?wsdl
相关推荐
cxf3.0 spirng 集成笔记, CXF 部署说明 CXF 教程
NULL 博文链接:https://wensiqun.iteye.com/blog/1099349
CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx )
Axis2版本学习笔记,CXF版学习笔记,WebServices学习笔记
Apache cxf 学习笔记.pdfApache cxf 学习笔记.pdf
Apache cxf 学习笔记,供大家参考
基础的webservice笔记,后面开始使用webservice的cxf+spring整合框架。教学视频太大放不来,需要可以向我要!
CXF例子 创建服务端、客户端、相关xml的配置和环境jar说明
CXF 包含了大量的功能特性,但是主要集中在以下几个方面: 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。...