java的webservice开发步骤
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.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
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.gif)
@WebService public interface INumberDao { @WebMethod public String Add(@WebParam(name="num1") int num1,@WebParam(name="num2") int num2);}
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.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 "
4. 创建服务端 Server代码
大体步骤:①创建webservice服务工厂(JaxWsServerFactoryBean),
注册webservice接口(setServiceClass),
发布接口(setAddress(),setServiceBean()),
创建webservice(create())
具体代码如下
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.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://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.gif)
public static void main(String[] args) throws InterruptedException { // 启动服务端 new Server(); System.out.println("Server ready....."); // 休眠一分钟,便于测试 Thread.sleep(1000 * 60); System.exit(0); } }
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.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); }
}
二、开发service(服务端) 学习网址:http://blog.sina.com.cn/s/blog_4aa9c9d101015k5f.html(手动)
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.gif)
<servlet> <servlet-name>XFireServletservlet-name> <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet servlet-class> servlet> <servlet-mapping> <servlet-name>XFireServletservlet-name> <url-pattern>/servlet/XFireServlet/*url-pattern> servlet-mapping>
<servlet-mapping> <servlet-name>XFireServletservlet-name> <url-pattern>/services/*url-pattern>
servlet-mapping>
5.在WEB-INF下面创建一个xfire文件,建一个service.xml,并且把META-INF移到WEB-INF里面
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.gif)
xml version&#61;"1.0" encoding&#61;"UTF-8"?> <beans> <service xmlns&#61;"http://xfire.codehaus.org/config/1.0"> <name>Numbersname> <serviceClass>service.INumberDaoserviceClass> <implementationClass>serviceimpl.NumberDaoImplimplementationClass> <style>wrappedstyle> <use>literaluse> <scope>applicationscope> service> beans>
6.部署tomcat
7.访问:http://localhost:6070/webservice_Xfire/services 能访问则说明服务端已经ok了
8.创建剪客户端
①写客户端的接口(测试调用的时候可用)
②测试方法 测试成功了就可以进行调用接口,这样不容易出错
9.java调用接口
![](https://img7.php1.cn/3cdc5/cb19/cd5/6087820e0e54e1de.gif)
![](https://img7.php1.cn/3cdc5/cb19/cd5/46269d60931e7b58.gif)
public static void main(String[] args) { Service service &#61; new ObjectServiceFactory().create(ClientDao.class); XFire xfire &#61; XFireFactory.newInstance().getXFire(); XFireProxyFactory factory &#61; new XFireProxyFactory(xfire); String serviceUrl &#61; "http://localhost:6070/webservice_Xfire/services/Numbers"; ClientDao client &#61; null; try { client &#61; (ClientDao)factory.create(service,serviceUrl); } catch (Exception e) { System.out.println(e); e.printStackTrace(); } int num1&#61;500; int num2 &#61;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安装 参考:http://wenku.baidu.com/view/afd0402fccbff121dd368387.html