J2EEwebservice开发(二)动态代理与动态调用

j2ee web service 客户端的三种调用方式:

东河网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联公司于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

(一)占位程序:该种调用方式需要服务端生成所谓的占位程序,也是性能最好的一种方式,据有的文档介绍说用占位程序实现的web服务不能实现各种编程语言比如C#之是互相调用就是会引起互操作性的问题.而且生成占位程序的web服务的确稍麻烦一点,更重要的是我不喜欢这种方式,也就不作备忘了:)。

(二)动态代理:该种方式需要一个指向WSDL文档的URL。具体实现:

 
 
 
  1. ServiceFactoryImpl factory = new ServiceFactoryImpl();   
  2. // 工厂类,取得service对象,   
  3. URL wsdlURL = new File(  "complexType-array/WEB-INF/wsdl/CountUser.wsdl").toURL();   
  4. //wsdl 文档的URL 它可以是一个远程的URL 但是本例引用本地硬盘上的一个wsdl文件,其好处是提高程序的性能。   
  5. URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  6. // 映射文件的URL 需要着重说明的就是这个映射文件了,标准的j2ee web service API实现中可不需要这玩意,但是在Jboss的实现中不要这个就会报错cannot obtain java mapping type...,在jboss下开发的web 服务客户端移植时需要特别注意,麻烦!   
  7. QName qname = new QName("http://array""CountUserService");   
  8. Service service = factory.createService(wsdlURL, qname, mappingURL);  
  9. // 通过工厂方法得到一个Service对象,但createService(wsdlURL, qname, mappingURL)方法是jboss的具体实现增加一的一个方法,标准API可没有这玩意,对于数组类型的传递只能用这个方法了,奇怪的是客户端居然需要部署在服务器端的映射文件,没劲!          
  10. CountUser port = (CountUser) service.getPort(CountUser.class);   
  11. // 取得服务器端的接口。   

( 三)动态调用。

 
 
 
  1. URL wsdlURL = new File("complexType-array/WEB-INF/wsdl/CountUser.wsdl").toURL();   
  2. URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  3. QName qname = new QName("http://array""CountUserService");// 表示服务名QName对象。   
  4. Service service = factory.createService(wsdlURL, qname, mappingURL);   
  5. Call call = service.createCall();   
  6. // 没什么好说的,依然要用到wsdl文档文件,映射文件。   
  7. call.setOperationName(new QName(TARGET_NAMESPACE, "countUser"));// 指定方法名   
  8. call.setPortTypeName(new QName("CountUser"));// 指定端口名   
  9. ("value",Constants.TYPE_LITERAL_ANYSIMPLETYPE,ParameterMode.IN);   
  10. call.setReturnType(Constants.TYPE_LITERAL_INT);   
  11. Object retObj = call.invoke(new Object[] {user});   

服务器端的实现参见j2ee web service(一)完整的客户端代码如下:

 
 
 
  1. package array;   
  2.  
  3. import java.net.URL;   
  4. import javax.xml.rpc.*;   
  5. import javax.xml.namespace.QName;   
  6. import java.util.*;   
  7. import java.io.File;   
  8. import org.jboss.ws.jaxrpc.ServiceFactoryImpl;   
  9. import org.jboss.ws.Constants;   
  10.  
  11. public class ArrayExample {   
  12.      public ArrayExample() {   
  13.     }   
  14.  
  15.     private static final String TARGET_NAMESPACE = "http://array";   
  16.  
  17.     private CountUser getPort() throws Exception {   
  18.  
  19.         ServiceFactoryImpl factory = new ServiceFactoryImpl();   
  20.         URL wsdlURL = new File("complexType-array/WEB-INF/wsdl/CountUser.wsdl"). toURL();   
  21.         URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  22.         QName qname = new QName("http://array""CountUserService");   
  23.         Service service = factory.createService(wsdlURL, qname, mappingURL);   
  24.         CountUser port = (CountUser) service.getPort(CountUser.class);   
  25.         return port;   
  26.     }   
  27.  
  28.     public void testComplexUserArray(User[] user) throws   
  29.             Exception {   
  30.         CountUser port = getPort();   
  31.         try {   
  32.             int returnValue = port.countUser(user);   
  33.             System.out.print(returnValue);   
  34.         } catch (Exception e) {   
  35.             throw e;   
  36.         }   
  37.     }   
  38.  
  39.     public void DIIClient(User[] user) throws Exception {   
  40.         ServiceFactoryImpl factory = new ServiceFactoryImpl();   
  41.         URL wsdlURL = new File("complexType-array/WEB-INF/wsdl/CountUser.wsdl").toURL();   
  42.         URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  43.         QName qname = new QName("http://array""CountUserService");   
  44.         Service service = factory.createService(wsdlURL, qname, mappingURL);   
  45.         Call call = service.createCall();   
  46.         call.setOperationName(new QName(TARGET_NAMESPACE, "countUser"));   
  47.         call.setPortTypeName(new QName("CountUser"));   
  48.         call.setReturnType(Constants.TYPE_LITERAL_INT);   
  49.         Object retObj = call.invoke(new Object[] {user});   
  50.         System.out.println(retObj.toString());   
  51.     }   
  52.  
  53.     public static void main(String[] args) throws Exception {   
  54.         ArrayExample arrayexample = new ArrayExample();   
  55.         User[] user = new User[2];   
  56.         user[0] = new User(" 张三""027-88888888"new Date());   
  57.         user[1] = new User("lisi"nullnew Date());   
  58.         //arrayexample.testComplexUserArray(user);   
  59.         arrayexample.DIIClient(user);   
  60.     }   
  61. }   

至此好象一个可以应用的J2EE web service服务就完成了,然而这才仅仅只是开始~~~~~~~~~

网页题目:J2EEwebservice开发(二)动态代理与动态调用
本文来源:http://www.shufengxianlan.com/qtweb/news9/224709.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联