基于CXF的webservice开发

      webservice是一个技术,但确切的说是一个标准。而不同的语言对webservice有不同的实现框架。这里谈谈java的Apache CXF实现框架,java除了CXF,还有aixs等。
      首先是将CXF下载下来,下载网站是: http://cxf.apache.org/,解压,然后就是开发,开发是基于spring项目的基础之上。
      首先是将架包导入项目中,因为我构建的是maven项目,所以在pom.xml添加一下代码即可
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-api</artifactId>
			<version>2.3.3</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
  		<dependency>
	  		<groupId>apache-httpclient</groupId>
	  		<artifactId>commons-httpclient</artifactId>
	  		<version>3.1</version>
  		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>2.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxrs</artifactId>
			<version>2.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>2.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-bindings-soap</artifactId>
			<version>2.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-bindings-http</artifactId>
			<version>2.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-common-utilities</artifactId>
			<version>2.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-testutils</artifactId>
			<version>2.3.3</version>
			<scope>test</scope>
		</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>2.3.3</version>
			<scope>provided</scope>
		</dependency>

     架包导完了,接下来就是编码,编写要构发布的接口:Login.java
package com.webservice.cxf.worina.service;


public interface Login {
	public String add(String name);
}

LoginImpl.java
package com.webservice.cxf.worina.service.impl;

import com.webservice.cxf.worina.service.Login;

public class LoginImpl implements Login {

	public String add(String name) {
		return "hello " +name;
	}
}

接口和实现类都写完了,接下来是配置文件
新建一个applicationContext-ws.xml
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:cxf="http://cxf.apache.org/core"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"
default-autowire="byName">
        <!-- 以下三个文件为CXF架包自带的,只要引入即可以 -->
	<import resource="classpath*:META-INF/cxf/cxf.xml" />
	<import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath*:META-INF/cxf/cxf-servlet.xml" />
	
	<jaxws:endpoint id="loginImpl" implementor="#login" address="/login"></jaxws:endpoint>
	<bean id="login" class="com.webservice.cxf.worina.service.impl.LoginImpl" />
</beans>

到这为止,还有一步很重要的,就是在web.xml配置CXF
<!-- 项目启动的时候启动CXF的servlet -->
<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>
			org.apache.cxf.transport.servlet.CXFServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping> 

基本的代码已经有了,然后就是启动项目,浏览器中访问
http://localhost:9999/yourProjectName/login?wsdl
如果出现下面页面,那就说明成功了
<wsdl:definitions xmlns:ns1="http://service.worina.cxf.webservice.com/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.service.worina.cxf.webservice.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="LoginImplService" targetNamespace="http://impl.service.worina.cxf.webservice.com/">
<wsdl:import location="http://localhost:9999/login?wsdl=Login.wsdl" namespace="http://service.worina.cxf.webservice.com/"></wsdl:import>
<wsdl:binding name="LoginImplServiceSoapBinding" type="ns1:Login">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="add">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="add">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="LoginImplService">
<wsdl:port binding="tns:LoginImplServiceSoapBinding" name="LoginImplPort">
<soap:address location="http://localhost:9999/youProjectName/login"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


使用客户端调用
	public static void main(String[] args) {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setAddress("http://localhost:9999/login?wsdl");		
		factory.setServiceClass(Login.class);
		Login login =(Login) factory.create();
		System.out.println(login.add("XXX "));
	}

调用成功的话即发布成功!

猜你喜欢

转载自worina8080.iteye.com/blog/1564900