CXF学习01---开发服务端与客户端

使用CXF开发Web Service服务端需要两部分:接口和实现类

步骤:

1、开发一个Web Service 业务接口,该接口需要用@WebService注解

2、开发一个Web Service实现类,实现类也需要用@WebService注解

3、添加Jar包,并发布WebService

具体步骤如下:

1、新建Java项目即可,我们用CXF内置的Jetty服务器

2、开发业务接口:

package com.onyas.ws.cxf;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
	
	String sayHi(String name);

}

3、开发实现类

package com.onyas.ws.cxf.impl;

import java.util.Date;

import javax.jws.WebService;

import com.onyas.ws.cxf.HelloWorld;

@WebService(endpointInterface = "com.onyas.ws.cxf.HelloWorld"
	,serviceName = "HelloWorldWs")
public class HelloWorldWs implements HelloWorld {

	@Override
	public String sayHi(String name) {
		return "Hello " + name+new Date();
	}

}

4、添加Jar包:

这个教程所用的CXF版本为2.7.9,所需要的jar包请看源代码,在最后附有源代码的下载地址,所有cxf版本的下载地址

5、发布服务端:

package onyas;

import javax.xml.ws.Endpoint;

import com.onyas.ws.cxf.HelloWorld;
import com.onyas.ws.cxf.impl.HelloWorldWs;

public class ServerMain {

	public static void main(String[] args) {
		HelloWorld hw = new HelloWorldWs();
		Endpoint.publish("http://127.0.0.1:9999/onyasWS", hw);
		System.out.println("WebService已成功发布");
	}
	
}

注意运行服务端以后,不要关在闭服务端

6、打开浏览器,到你所发布的地址去验证,是否发布成功,本教程所发布的地址为:http://127.0.0.1:9999/onyasWS?wsdl,进入这个地址,如果所呈现的结果如下图所示,刚发布成功

  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.cxf.ws.onyas.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://cxf.ws.onyas.com/" name="HelloWorldWs" targetNamespace="http://impl.cxf.ws.onyas.com/">
  <wsdl:import location="http://localhost:9999/onyasWS?wsdl=HelloWorld.wsdl" namespace="http://cxf.ws.onyas.com/" /> 
- <wsdl:binding name="HelloWorldWsSoapBinding" type="ns1:HelloWorld">
  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="sayHi">
  <soap:operation soapAction="" style="document" /> 
- <wsdl:input name="sayHi">
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="sayHiResponse">
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="HelloWorldWs">
- <wsdl:port binding="tns:HelloWorldWsSoapBinding" name="HelloWorldWsPort">
  <soap:address location="http://localhost:9999/onyasWS" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>

服务端开发完毕

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用CXF开发Web Service客户端:

1、新建Java项目

2、进入到客户端项目的src目录中,调用CXF提供的wsdl2java工具(把下载的cxf目录下的bin目录配置到path环境变量中),根据WSDL文档生成相应的代码,因为任何语言实现的Web Service,都需要提供并暴露WSDL文档,就是上文所发布的那个地址。

也就是如下:F:\myworkspace\Cxf_Client\src>       wsdl2java -frontend jaxws21 http://localhost:9999/onyasWS?wsdl

3、找到wsdl2java所生成的类中,一个继承了Service的类,该类的实例可以当成工厂类来使用。

4、调用Service子类的实例getXXXXport方法,返回远程Web Service的代理。

代码如下所示:

package onyas;

import com.onyas.ws.cxf.HelloWorld;
import com.onyas.ws.cxf.impl.HelloWorldWs;


public class ClentMain {

	public static void main(String[] args) {
		
		HelloWorldWs factory = new HelloWorldWs();
		//此处返回的只是远程Web Service的代理
		HelloWorld hw = factory.getHelloWorldWsPort();
		System.out.println(hw.sayHi("Test"));
	}
	
}

5、运行客户端,如果显示“Hello TestFri May 02 13:42:20 CST 2014”,表示运行成功

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

可能出现的错误:

cxf在客户端调用时报这个错误:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:171)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:94)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:240)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
at $Proxy29.sayHi(Unknown Source)
at onyas.ClentMain.main(ClentMain.java:13)
同时cxf在服务端报这个错误:
java.lang.RuntimeException: Cannot create a secure XMLInputFactory
解决办法:
原因是少了一个叫woodstox-core-asl-4.2.0.jar的jar包,添加该jar包,并加到add to build path即可(我用的是apache-cxf-2.7.9)


java.lang.NoClassDefFoundError: org/codehaus/stax2/XMLOutputFactory2
解决办法:
原因是少了一个叫stax2-api-3.1.1.jar的jar包,添加该jar包,并加到add to build path即可(我用的是apache-cxf-2.7.9)

注意:要重启服务器端,并且重新生成客户端代码。


代码下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值