`
sskhnje
  • 浏览: 15505 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
文章分类
社区版块
存档分类
最新评论

cxf 笔记

阅读更多

 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

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics