`

CXF入门教程(1) -- 第一个webService

 
阅读更多
参考:http://blog.csdn.net/neareast/article/details/7714778
本代码使用Maven来管理依赖
pom.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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.pandy</groupId>
	<artifactId>webservice</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>webservice Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<spring.version>3.2.1.RELEASE</spring.version>
		<tomcat.version>2.1-SNAPSHOT</tomcat.version>
		<junit.version>3.8.1</junit.version>
	</properties>


	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-asm</artifactId>
			<version>3.1.4.RELEASE</version>
		</dependency>


		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-core</artifactId>
			<version>2.7.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-api</artifactId>
			<version>2.7.3</version>
		</dependency>

	</dependencies>
	<build>
		<finalName>webservice</finalName>
	</build>
</project>


javaBean
package com.webservices.bean;

public class User {

	private String name;
	private String email;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "User [userName=" + name + ", email=" + email + "]";
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}


接口:首先我们写一个serivce接口,其中包含一个操作sayHi,它的作用是向其提交名字的人问好。
package com.webservices;

import javax.jws.WebParam;
import javax.jws.WebService;

import com.webservices.bean.User;
/**
 * 将要用来发布的接口
 * @author pandy
 *
 */
@SuppressWarnings("restriction")
@WebService
public interface iHelloWorld {

	// 加入WebParam注解,以保证xml文件中参数名字的正确性
	String sayHi(@WebParam(name = "text") String text);
	String sayHiToUser(User user);

}


实现类: WebParam注解是必须的,因为java借口编译后的.class文件不保存参数的名字,所以如果没有加注解,参数将被命名为arg0。接口实现部分的示例如下:
package com.webservices.impl;

import java.util.LinkedHashMap;
import java.util.Map;

import javax.jws.WebService;

import com.webservices.iHelloWorld;
import com.webservices.bean.User;
/**
 * 接口的实现类
 * @author pandy
 *
 */
@SuppressWarnings({ "restriction" })
@WebService(endpointInterface = "com.webservices.iHelloWorld", serviceName = "HelloWorld")
public class HelloWorldImpl implements iHelloWorld {
	Map<Integer, User> users = new LinkedHashMap<Integer, User>();

	@Override
	public String sayHi(String text) {
		System.out.println("sayHi called");
		return "Hello " + text;
	}

	@Override
	public String sayHiToUser(User user) {
		System.out.println("sayHiToUser called");
		users.put(users.size() + 1, user);
		return "Hello " + user.getName();
	}

}

@WebService注解让CXF知道我们希望使用哪个接口来创建WSDL,本例中就是iHelloWorld接口。

服务发布类
import javax.xml.ws.Endpoint;

import com.webservices.impl.HelloWorldImpl;
  
/**
 * 发布程序
 * @author pandy
 *
 */
@SuppressWarnings("restriction")
public class ServiceTest {  
  
    protected ServiceTest() throws Exception {  
        // START SNIPPET: publish  
        System.out.println("Starting Server");  
        HelloWorldImpl implementor = new HelloWorldImpl();  
        String address = "http://localhost:8080/helloWorld";  
        Endpoint.publish(address, implementor);  
        // END SNIPPET: publish  
    }  
  
    public static void main(String args[]) throws Exception {  
        new ServiceTest();  
        System.out.println("Server ready...");  
  
        Thread.sleep(5 * 60 * 1000);  
        System.out.println("Server exiting");  
        System.exit(0);  
    }  
  
}  


进入: http://localhost:8080/helloWorld?wsdl
This XML file does not appear to have any style information associated
with it. The document tree is shown below.
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is 
	JAX-WS RI 2.2.4-b01. -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is 
	JAX-WS RI 2.2.4-b01. -->
<definitions
	xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
	xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"
	xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:tns="http://impl.webservices.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://impl.webservices.com/"
	name="HelloWorld">
	<import namespace="http://webservices.com/" location="http://localhost:8080/helloWorld?wsdl=1" />
	<binding xmlns:ns1="http://webservices.com/" name="HelloWorldImplPortBinding"
		type="ns1:iHelloWorld">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
			style="document" />
		<operation name="sayHi">
			<soap:operation soapAction="" />
			<input>
				<soap:body use="literal" />
			</input>
			<output>
				<soap:body use="literal" />
			</output>
		</operation>
		<operation name="sayHiToUser">
			<soap:operation soapAction="" />
			<input>
				<soap:body use="literal" />
			</input>
			<output>
				<soap:body use="literal" />
			</output>
		</operation>
	</binding>
	<service name="HelloWorld">
		<port name="HelloWorldImplPort" binding="tns:HelloWorldImplPortBinding">
			<soap:address location="http://localhost:8080/helloWorld" />
		</port>
	</service>
</definitions>



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics