(三)调用web服务
- (二)发布第一个WebService服务与DSWL文档解析 讲解了如何发布一个web服务,本章主要讲述如何调用一个web服务。
- 这里有三种方式:
- 使用代理模式调用,需要将服务端的接口类拷贝到客户端中。(不常用,因为不大可能拿到服务端的接口类。)
- 通过客户端桩的方式。
3. 发送原始的soap消息。
一、使用代理模式
- 需要将服务端的接口类拷贝到客户端中。
- 本例所调用的服务为(二)发布第一个WebService服务与DSWL文档解析 这个章节所发布的web服务,也就是说需要把该服务的接口类拷贝到客户端中。
package test; import java.net.MalformedURLException; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Service; import service.WebService_1; /** * 使用代理模式 1.需要将服务端的接口类拷贝到客户端中。 * * @author Administrator * */ public class Test { public static void main(String[] args) { try { // wsdlDocumentLocation是所调用服务的wsdl地址 URL wsdlDocumentLocation = new URL("http://localhost:3031/first?wsdl"); // QName构造函数的第一个参数是所调用服务的wsdl的命名空间。第二个参数是所调用的服务名 QName serviceName = new QName("http://service/", "WebService_1_implService"); Service service = Service.create(wsdlDocumentLocation, serviceName); //通过getport获取到的是一个代理对象,而不是接口对象 WebService_1 webService_1 = service.getPort(WebService_1.class); int result = webService_1.add(25, 10); System.out.println("result===" + result); } catch (Exception e) { e.printStackTrace(); } } }
结果:
二、客户端桩
-
通过wsdl地址或者wsdl文档,生成客户端的调用类,被称为客户端桩的方式。
- 步骤:
- 使用eclipse/myeclipse工具来生成客户端(内部调用jdk命令)(本例中使用)。
- 使用jdk命令来生成客户端。
-
该图为jdk命令,其中 -d表示存放客户端代码的目录,http://localhost:4040/first?wsdl为要生成客户端的wsdl文档地址。
该命令生效后,会生成目录:
其中,客户端代码就在这个目录下。
- 案例:(使用工具生成客户端)
- 本例所调用的服务为(二)发布第一个WebService服务与DSWL文档解析 这个章节所发布的web服务
1. 生成客户端。
package test; import java.rmi.RemoteException; import service.WebService_1; import service.WebService_1Proxy; public class Test { public static void main(String[] args) throws RemoteException { WebService_1 weService_1 = new WebService_1Proxy().getWebService_1(); int res = weService_1.add(20, 50); System.out.println("res=" + res); } }
结果:
三、发送原始的soap消息
- 本例中使用soapUI软件来测试。
- 如上图,使用最原始的soap协议发送消息这是最底层的做法。客户端通过封装数据到发送soap消息至服务端,然后服务端返回soap消息至客户端,客户端再对soap消息进行解析获取返回数据。
- 这种方式与第二种客户端桩的方式在于客户端桩方式已经将返回来的soap消息解析为数据并封装到对象里,我们只需要操作对象即可。