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服务说明文件
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命令生成客户端代码来调用