WebService之CXF框架应用中篇

来源:互联网 发布:java 替换特殊字符 编辑:程序博客网 时间:2024/06/14 16:23

一、CXF框架发布WebService服务

1、所需资源:apache-cxf-2.4.2.zip、cxf环境和jdk环境、Eclipse开发平台

2、建Java Project,将apache-cxf-2.4.2.zip解压出来的lib文件夹的jar包加入工程,注意其中有个WHICH_JARS文件不是jar包!

3、创建接口服务类

package top.einino.cxf.server;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
@WebService(

serviceName=”MyServiceName”,//修改服务访问点集合名字
portName=”MyHelloServer”,//修改端口名字
name=”MyHelloServer”,//修改服务类的名字
targetNamespace=”top.einino.ws” //修改命名空间名字

)

//改变soap版本,默认为11
@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)

public interface HelloServer {

public  @WebResult(name=”helloresult”) String sayHello(@WebParam(name=”personName”) String name);

}

 

4、创建接口实现类

package top.einino.cxf.server;

public class HelloServerImpl implements HelloServer{

@Override
public String sayHello(String name) {

return name+” hello”;

}

}

5、创建服务发布类

package top.einino.cxf.server;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class ServerPublish {

public static void main(String[] args) {

//1、创建服务工厂对象
JaxWsServerFactoryBean jsfb = new JaxWsServerFactoryBean();
//2、加入输出输入拦截
jsfb.getInInterceptors().add(new LoggingInInterceptor());
jsfb.getOutInterceptors().add(new LoggingOutInterceptor());
//3、指定服务地址
jsfb.setAddress(“http://127.0.0.1:1128/hello”);
//4、指定服务类接口
jsfb.setServiceClass(HelloServer.class);
//5、指定服务具体实现类
jsfb.setServiceBean(new HelloServerImpl());
//6、发布服务
jsfb.create();

}

}

6、运行ServerPublish 发布服务后,即可访问http://127.0.0.1:1128/hello?wsdl,得到wsdl服务说明文件

二、CXF框架生成客户端代码

1、现在即可用jdk通过wsdl服务说明文件得到客户端代码,但经过实验会发现,使用wsimport命令这时是不能完成生成客户端代码的,这是因为我们在写接口服务类时,将其设置为soap12了,然后jdk的wsimport只能生成版本soap11的。所以这时,我们就得引入cxf的运行命令:wsdl2java命令

命令具体语句:wsdl2java -d . -p top.einino.cxf.client http://127.0.0.1:1128/hello?wsdl

2、创建工程将生成的代码导入,调用即可

package top.einino.client;

import top.einino.cxf.client.MyHelloServer;
import top.einino.cxf.client.MyServiceName;

public class HelloClient {

public static void main(String[] args) {

//创建服务集合点,方式跟jdk调用基本相同
MyServiceName myServiceName = new MyServiceName();
//得到服务实现类
MyHelloServer myHelloServer = myServiceName.getMyHelloServer();
//调用业务逻辑
String sayHello = myHelloServer.sayHello(“BINGO”);
//测试数据
System.out.println(sayHello);

}

}

三、小结

该博文主要通过使用cxf框架中的JaxWsServerFactoryBean 类来发布服务,并用wsdl2java命令生成客户端代码来调用

0 0