CXF = Celtix + XFire,继承了Celtix和XFire两大开源项目的精华,是一个开源的,全功能的,容易使用的WebService框架。文中所使用到的软件版本:Java 1.8.0_191、CXF 3.2.11。

参考Java调用WebService方法总结(1)–准备工作

  1. public static void client(String param) {
  2. try {
  3. JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
  4. //DynamicClientFactory factroy = DynamicClientFactory.newInstance();
  5. Client client = factroy.createClient("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
  6. Object[] results = client.invoke("toTraditionalChinese", param);
  7. System.out.println("client方式:" + results[0]);
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }
  11. }

该方式需要用到如下jar文件,少jar文件会报各种各样的错误。

cxf-core-3.2.11.jar、cxf-rt-bindings-soap-3.2.11.jar、cxf-rt-databinding-jaxb-3.2.11.jar、cxf-rt-frontend-jaxws-3.2.11.jar、cxf-rt-frontend-simple-3.2.11.jar、cxf-rt-transports-http-3.2.11.jar、cxf-rt-wsdl-3.2.11.jar、stax2-api-3.1.4.jar、woodstox-core-5.0.3.jar、xmlschema-core-2.2.4.jar、wsdl4j-1.6.3.jar。这些jar文件在下载的CXF包里都有。

执行命令:

  1. %CXF_HOME%/bin/wsdl2java.bat -p com.inspur.ws.cxf -client http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl

-p 指定包名  -client 生成客户端调用样例

更多的参数说明详见官方文档:http://cxf.apache.org/docs/wsdl-to-java.html

  1. public static void wsdl2java(String param) {
  2. com.inspur.ws.cxf.TraditionalSimplifiedWebService service = new com.inspur.ws.cxf.TraditionalSimplifiedWebService();
  3. com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port = service.getTraditionalSimplifiedWebServiceSoap();
  4. String reuslt = port.toTraditionalChinese(param);
  5. System.out.println("wsdl2java方式:" + reuslt);
  6. com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port2 = service.getTraditionalSimplifiedWebServiceSoap12();
  7. reuslt = port2.toTraditionalChinese(param);
  8. System.out.println("wsdl2java方式2:" + reuslt);
  9. }

这种方式需要服务端是CXF用Simple Frontend发布的WebService。这里用官网的demo来演示。

a、接口

  1. package com.inspur.ws.cxf.server;
  2. public interface HelloWorld {
  3. String sayHi(String text);
  4. }

b、实现类

  1. package com.inspur.ws.cxf.server;
  2. public class HelloWorldImpl implements HelloWorld {
  3. public String sayHi(String text) {
  4. return "Hello " + text;
  5. }
  6. }

c、发布服务

  1. package com.inspur.ws.cxf.server;
  2. import org.apache.cxf.frontend.ServerFactoryBean;
  3. public final class Server {
  4. private Server() {
  5. }
  6. public static void startServer() throws Exception {
  7. HelloWorldImpl helloworldImpl = new HelloWorldImpl();
  8. ServerFactoryBean svrFactory = new ServerFactoryBean();
  9. svrFactory.setServiceClass(HelloWorld.class);
  10. svrFactory.setAddress("http://localhost:9000/Hello");
  11. svrFactory.setServiceBean(helloworldImpl);
  12. svrFactory.create();
  13. }
  14. public static void main(String args[]) throws Exception {
  15. startServer();
  16. System.out.println("Server ready...");
  17. Thread.sleep(5 * 60 * 1000);
  18. System.out.println("Server exiting");
  19. System.exit(0);
  20. }
  21. }

发布服务时会用到好多jar文件,如果少jar文件会报各种奇怪的错误;可以把%CXF_HOME%/lib下的jar文件都拿过来,通过不断删除一些jar文件然后重启发布服务看有没有问题的方法来删除多余的jar文件。

  1. public static void clientProxyFactoryBean (String param) {
  2. ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
  3. factory.setServiceClass(HelloWorld.class);
  4. factory.setAddress("http://localhost:9000/Hello");
  5. HelloWorld serice = (HelloWorld) factory.create();
  6. System.out.println(serice.sayHi(param));
  7. }

  1. package com.inspur.ws;
  2. import org.apache.cxf.endpoint.Client;
  3. import org.apache.cxf.frontend.ClientProxyFactoryBean;
  4. import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
  5. import com.inspur.ws.cxf.server.HelloWorld;
  6. /**
  7. * CXF调用WebService
  8. *
  9. */
  10. public class CXF {
  11. /**
  12. * Client方式
  13. * @param param
  14. */
  15. public static void client(String param) {
  16. try {
  17. JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
  18. //DynamicClientFactory factroy = DynamicClientFactory.newInstance();
  19. Client client = factroy.createClient("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
  20. Object[] results = client.invoke("toTraditionalChinese", param);
  21. System.out.println("client方式:" + results[0]);
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. /**
  27. * wsdl2java方式
  28. * @param param
  29. */
  30. public static void wsdl2java(String param) {
  31. com.inspur.ws.cxf.TraditionalSimplifiedWebService service = new com.inspur.ws.cxf.TraditionalSimplifiedWebService();
  32. com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port = service.getTraditionalSimplifiedWebServiceSoap();
  33. String reuslt = port.toTraditionalChinese(param);
  34. System.out.println("wsdl2java方式:" + reuslt);
  35. com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port2 = service.getTraditionalSimplifiedWebServiceSoap12();
  36. reuslt = port2.toTraditionalChinese(param);
  37. System.out.println("wsdl2java方式2:" + reuslt);
  38. }
  39. /**
  40. * Simple Frontend Client Proxy方式
  41. * @param param
  42. */
  43. public static void clientProxyFactoryBean (String param) {
  44. ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
  45. factory.setServiceClass(HelloWorld.class);
  46. factory.setAddress("http://localhost:9000/Hello");
  47. HelloWorld serice = (HelloWorld) factory.create();
  48. System.out.println("Simple Frontend Client Proxy方式:" + serice.sayHi(param));
  49. }
  50. public static void main(String[] args) {
  51. client("小学");
  52. wsdl2java("大学");
  53. clientProxyFactoryBean("小学");
  54. }
  55. }

View Code

 

 

版权声明:本文为wuyongyin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wuyongyin/p/11884197.html