java的webservice开发步骤
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
@WebService public interface INumberDao { @WebMethod public String Add(@WebParam(name="num1") int num1,@WebParam(name="num2") int num2); }
@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())
具体代码如下
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(); };
public static void main(String[] args) throws InterruptedException { // 启动服务端 new Server(); System.out.println("Server ready....."); // 休眠一分钟,便于测试 Thread.sleep(1000 * 60); System.exit(0); } }
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); } }
二、开发service(服务端) 学习网址:http://blog.sina.com.cn/s/blog_4aa9c9d101015k5f.html(手动)
<!-- 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里面
<?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调用接口
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