java的webservice开发步骤
java的webservice开发步骤
CXF的步骤:
1.导入jar:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1. commons-logging-1.1.1.jar 2. geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar) 3. geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250) 4. geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar) 5. geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar) 6. geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181) 7. geronimo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar) 8. geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar) 9. jaxb-api-2.1.jar 10. jaxb-impl-2.1.12.jar 11. jetty-6.1.21.jar 12. jetty-util-6.1.21.jar 13. neethi-2.0.4.jar 14. saaj-api-1.3.jar 15. saaj-impl-1.3.2.jar 16. wsdl4j-1.6.2.jar 17. wstx-asl-3.2.8.jar 18. XmlSchema-1.4.5.jar 19. xml-resolver-1.2.jar 20. cxf-2.2.2.jar jetty-http-7.5.4.v20111024.jar jetty-server-7.5.4.v20111024.jar jetty-io-7.5.4.v20111024.jar jetty-continuation-7.5.4.v20111024.jar
2. 编写webservice接口service,
注意注解,类上面的注解和方法上面的注解,参数的注解(参数注解的目的是提高参数的可读性)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@WebService public interface INumberDao { @WebMethod public String Add(@WebParam(name="num1") int num1,@WebParam(name="num2") int num2); }
3. 编写webservice接口的实现serviceimpl,
注意类上面的注解和方法的注解,参数的注解
View Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@WebService @SOAPBinding(style=Style.RPC) public class NumberDaoImpl implements INumberDao{ @WebMethod public String Add(@WebParam(name="num1") int num1, @WebParam(name="num2") int num2) { double sum = num1+num2; return "<message>\n<name>两数之和</name>\n<value>"+sum+"</value>\n</message>"; }
4. 创建服务端 Server代码
大体步骤:①创建webservice服务工厂(JaxWsServerFactoryBean),
注册webservice接口(setServiceClass),
发布接口(setAddress(),setServiceBean()),
创建webservice(create())
具体代码如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Server { private Server() { INumberDao helloWorld = new NumberDaoImpl(); // 创建WebService服务工厂 JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); // 注册WebService接口 factory.setServiceClass(INumberDao.class); // 发布接口 factory.setAddress("http://192.168.0.112:9000/number"); //访问的网址自己定义 factory.setServiceBean(helloWorld); // 创建WebService factory.create(); };
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) throws InterruptedException { // 启动服务端 new Server(); System.out.println("Server ready....."); // 休眠一分钟,便于测试 Thread.sleep(1000 * 60); System.exit(0); } }
5. 运行Server类,然后去访问那网址后面加上?wsdl;如果访问出现了wsdl的内容,那说明上述你的操作无误,可以编写客户端了,
6. 编写客户端代码 大体步骤:创建webservice服务工厂,加入接收和返回响应的拦截器,设定你要访问的接口的地址(XXX。class)和访问的地址,
创建一个服务器,访问你需要的方法,打印结果
具体代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class ClientTest { public static void main(String[] args) { //创建webservice服务工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); //加入一个接收响应日志的拦截器 factory.getInInterceptors().add(new LoggingInInterceptor()); //加入一个返回响应日志的拦截器 factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setServiceClass(INumberDao.class); factory.setAddress("http://192.168.0.112:9000/number"); //根据设置创建一个服务器 INumberDao client = (INumberDao) factory.create(); String reply = client.Add(50, 30); System.out.println(reply); } }
7.运行客户端测试代码,打印出对应的结果则OK
二、开发service(服务端) 学习网址:http://blog.sina.com.cn/s/blog_4aa9c9d101015k5f.html(手动)
使用xfire,我这里使用的是myeclipse集成的xfire进行测试的 利用xfire开发WebService,可以有三种方法:
1一种是从javabean 中生成;
2 一种是从wsdl文件中生成;
3 还有一种是自己建立webservice
方法3的步骤
自己手动建立Xfire的webservice
1.引入jar(18个+spring)
2.编写service接口
3.实现service接口
4.编写web.xml文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!-- STSRT XIFRE的配置 --> <servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/servlet/XFireServlet/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <!-- END XIFRE的配置 -->
5.在WEB-INF下面创建一个xfire文件,建一个service.xml,并且把META-INF移到WEB-INF里面
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="UTF-8"?> <beans> <service xmlns="http://xfire.codehaus.org/config/1.0"> <!-- 为该service起一个名字 --> <name>Numbers</name> <!-- service的接口类 --> <serviceClass>service.INumberDao</serviceClass> <!-- service的接口实现类 --> <implementationClass>serviceimpl.NumberDaoImpl</implementationClass> <style>wrapped</style> <use>literal</use> <scope>application</scope> </service> </beans>
6.部署tomcat
7.访问:http://localhost:6070/webservice_Xfire/services 能访问则说明服务端已经ok了
8.创建剪客户端
①写客户端的接口(测试调用的时候可用)
②测试方法 测试成功了就可以进行调用接口,这样不容易出错
9.java调用接口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { Service service = new ObjectServiceFactory().create(ClientDao.class); XFire xfire = XFireFactory.newInstance().getXFire(); XFireProxyFactory factory = new XFireProxyFactory(xfire); String serviceUrl = "http://localhost:6070/webservice_Xfire/services/Numbers"; ClientDao client = null; try { client = (ClientDao)factory.create(service,serviceUrl); } catch (Exception e) { System.out.println(e); e.printStackTrace(); } int num1=500; int num2 =500; System.out.println(client.Add(num1, num2)); System.out.println("----------------------"); System.out.println(client.Diff(num1, num2)); System.out.println("----------------------"); System.out.println(client.Quotient(num1, num2)); System.out.println("----------------------"); System.out.println(client.Accumulate(num1, num2)); }
注意:项目目录
(项目名)XXX --src (包名) dao daoimpl client callinteface entity -- 架包 --WebRoot --WEB-INF -lib -META-INF xfire services.xml MANIFEST.MF -web.xml --index.jsp
详细讲解:
其中axis2-1.6.0-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.6.0-war.zip文件用于将WebService发布到Web容器中。
安装AXIS2的具体步骤:
第一步:下载axis2-1.6的插件压缩包,axis2-eclipse-codegen-plugin-1.6.2.zip 和 axis2-eclipse-service-plugin-1.6.2.zip(现在最新版本是1.6.2);
第二步:解压下载的两个压缩包,并且将解压后的文件夹放到myeclipse8.6的dropins目录下;
第三步:在dropins目录下添加axis2.link文件,
内容是path=myeclipse的安装目录\\dropins(例如:我的文件内容为:path=E:\\Genuitec\\MyEclipse-8.6\\dropins);
第四步:重启myeclipse,在新建工程时,选择new-->other,然后在弹出窗口中输入axis2,如果出现axis向导,则代表安装成功.
注意:axis2 code generator 看字面意思就知道是 将webservice文件wsdl文件生成代码的一个向导
axis2 service archiver 这个是将java类 生成为webservice的向导。
注意:记住一定把生成好的my_service.arr(或者是XXX.arr)文件复制到apache-tomcat-7.0.54\webapps\axis2\WEB-INF\services下面去,不然找不到你的服务器
axis2的开发步骤:
先将你的axis安装好
检测你的axis是否安装好的方法:
启动Tomcat服务器,在浏览器中访问http://localhost:8080/axis/,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功
1.新建一个web项目
2.编写java接口
3.实现接口的方法 (发布webService)
4.项目右键--->new --> other -->在搜索框中输入axis,选择Axis2 Service Archiver --> 填写项目在运行时生成的类的地址
(如:R:\apache-tomcat-7.0.54\webapps\axis_webservice\WEB-INF\classes)--> 勾上Include .class files only --> 勾选Skip WSDL --> 如果是要连接数据库的那应该加上jar --> 下一步 --> 勾上Generate the service xml automaticaly --> 下一步 --> 填写Service name(服务名称,自己定义,如:axis2Service)-->填写Class name(类的完全限定名)(例如:serviceImpl.CalculateServiceImpl)-->下一步 --> 输入service 文件的保存路径(如:F:\项目\练习总结\axis_webservice\WebRoot\WEB-INF\services)和文件名(文件是以.aar结尾的)(本例子以:my_service.aar)-->完成
5.把刚刚在第4步创建的my_service.aar复制到R:\apache-tomcat-7.0.54\webapps\axis2\WEB-INF\services里面
(此刻里面有3个文件(services.list和my_service.aar和version-1.6.0.aar))
6.访问:http://localhost:6070/axis2/services/listServices, 如果网页里面显示有该项目的方法名那就表示可以通过了
注意:访问的时候,网址的地址一致:只有端口号不同
7.去访问方法:http://localhost:6070/axis2/services/axis2Service/addNum?num1=10&num2=5 访问正常是以wsdl的形式输出方法的结果
注意:访问的地址:http://loacalhost:端口号/axis2/services/服务名称/方法名称?参数