开发环境:
1、eclipse3.3 STP all-in-one版本 CXF2.1版本
2、建议用全新的eclipse,有可能因为以前装过Axis插件,导致你用CXF时无法编译生成WSDL文档和相应的代码,采用links文件夹来加载插件的方式比较好,不用的时候只需要将link文件注释就可以了
STP的link文件 path=D:\\Develop tools\\Component\\STP\\stp-all-in-one
3、开始配置环境:
1)STP安装成功,工具栏中会出现菜单 SOA
2) 打开首选项,找到 SOA TOOLS,点击 Installed Runtimes ,点击Add,添加 Apach CXF 2.0,浏览找到你解压缩的CXF目录,点击确定
3)点击 JAX -WS,选择User wizards to overwrite defaults
4)Apache cxf 和JAX-WS RI都选择soap1.2,保存设置,配置完毕
4、开始编程:
1)新建java工程,写接口类和方法,导入CXF插件lib下的jar包,点击工程,在菜单SOA中选择 JAX-WS,Enable JAX-WS,选择
java first praogranming,一次next,找到你的接口类,点击确定后会将你的接口发布成服务,
package com.jiuqi.minyang;
import javax.jws.WebService;
@WebService(name="Hello", targetNamespace="http://minyang.jiuqi.com/")
public interface Hello {
public String say();
}
此时,在工具栏菜单Window中点击show view 选择other,找到 SOA TOOLS,选择Annotation Properties,调出annotation视图,点击接口类中的@WebService,会定位到Annotation Properties视图,将soapbanding的属性改为true,此时会增加标记,将soapbanding的style属性改为DOCUMENT
@SOAPBinding(use=SOAPBinding.Use.LITERAL, style=SOAPBinding.Style.DOCUMENT)
@WebService(name="Hello", targetNamespace="http://minyang.jiuqi.com/")
public interface Hello {
public String say();
}
2)点击工程目录下的视图,点击say()方法,在点击菜单SOA,选择JAX-WS create web method ,会为方法增加标记
@SOAPBinding(use=SOAPBinding.Use.LITERAL, style=SOAPBinding.Style.DOCUMENT)
@WebService(name="Hello", targetNamespace="http://minyang.jiuqi.com/")
public interface Hello {
@WebMethod(operationName="say", exclude=false)
@ResponseWrapper(targetNamespace="http://minyang.jiuqi.com/", className="com.jiuqi.minyang.SayResponse", localName="sayResponse")
@RequestWrapper(targetNamespace="http://minyang.jiuqi.com/", className="com.jiuqi.minyang.Say", localName="say")
public String say();
}
3)选择工程,右键找到 JAX-WS TOOLS,选择generate code ,选择soap1.2 ,生成WSDL,Server,Client,点击finish完成。
4)自动生成了三个java文件包括,HelloClient.java ,HelloImpl.java, HelloServer.java,还有服务的WSDL描述文档
5)现在对HelloClient添加打印语句
public class HelloClient {
public static void main(String[] args) throws Exception {
QName serviceName = new QName("http://minyang.jiuqi.com/", "HelloService");
QName portName = new QName("http://minyang.jiuqi.com/", "HelloPort");
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING,
"http://localhost:9090/HelloPort");
com.jiuqi.minyang.Hello client = service.getPort(portName, com.jiuqi.minyang.Hello.class);
System.out.println(client.say());//这是手动添加的打印语句,调用服务的方法say();
// Insert code to invoke methods on the client here
}
}
接口实现类
public class HelloImpl implements Hello {
public java.lang.String say() {
try {
java.lang.String _return = "你好";//给字符串赋值,“你好”
return _return;
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
}
6)现在运行HelloServer.java,
public class HelloServer {
protected HelloServer() throws Exception {
System.out.println("Starting Server");
Object implementor = new com.jiuqi.minyang.HelloImpl();
String address = "http://localhost:9090/HelloPort";
Endpoint.publish(address, implementor);
}
public static void main(String args[]) throws Exception {
new HelloServer();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
打印语句 Server ready...,则服务端启动,
7) 运行HelloClient.java,会打印 “你好”
8)基本测试完毕,至于如何发布到tomcat服务器,还没试验成功,以后再补上