Java6 WebService客户端封装

简介:
在开发WebService客户端应用的时候,面临的最大挑战是事先不知道服务端要部署在哪里,端口是什么,因此Hello World的例子并不适合生产环境,还需要进一步的做改进。
 
改进的总体思想是将静态的部分替换为动态的,也就是说,将服务的ip和端口,做成动态参数,然后根据服务端的部署灵活改变这些配置参数。
 
下面针对前面的例子对客户端做一个改进。
 
1、写WebService服务的配置参数文件
 
wscfg.properties
#Java6WS服务的配置 
Java6WS.wsip=192.168.14.117 
Java6WS.wsport=8888
 
2、写配置参数获取工具
 
SysParamsToolkit.java
package lavasoft.common; 

import java.io.IOException; 
import java.util.Properties; 

/** 
* 媒资系统配置文件参数获取工具 

* @author leizhimin 2009-11-16 15:21:22 
*/
 

public  final  class SysParamsToolkit { 
         private  static Properties prop; 

         private SysParamsToolkit() { 
        } 

         static { 
                reload(); 
        } 

         public  static  boolean reload() { 
                 boolean flag =  true
                prop =  new Properties(); 
                 try { 
                        prop.load(SysParamsToolkit. class.getResourceAsStream( "/wscfg.properties")); 
                        flag =  false
                }  catch (IOException e) { 
                        e.printStackTrace(); 
                } 
                 return flag; 
        } 

         public  static Properties getSysProperties() { 
                 return prop; 
        } 

         /** 
         * 获取指定的系统属性值 
         * 
         * @param key 指定的属性名称 
         * @return 指定的系统属性值 
         */
 
         public  static String getProperty(String key) { 
                 return prop.getProperty(key); 
        } 

         /** 
         * 获取指定的系统属性值 
         * 
         * @param key                指定的属性名称 
         * @param defaultVal 默认值 
         * @return 指定的系统属性值 
         */
 
         public  static String getProperty(String key, String defaultVal) { 
                 return prop.getProperty(key, defaultVal); 
        } 

         public  static  void main(String[] args) { 
                Properties prop = getSysProperties(); 
        } 
}
 
3、修改Java6工具生成的代码,改静态的IP和端口为动态的参数。
 
这一步是最关键的一步,前面的都是准备工作,这一步才是实质性的工作,首先你要找到所生成客户端代码的服务接口实现类,在此是Java6WSService类。
@WebServiceClient(name =  "Java6WSService", targetNamespace =  "http://server.lavasoft/", wsdlLocation = "http://192.168.14.117:8080/java6ws/Java6WS?wsdl") 
public class Java6WSService 
                extends Service { 
        private final static URL JAVA6WSSERVICE_WSDL_LOCATION; 
        private final static Logger logger = Logger.getLogger(lavasoft.wsclient.Java6WSService.class.getName()); 

        static { 
                String wsip = SysParamsToolkit.getProperty("wsip""192.168.14.117"); 
                String wsport = SysParamsToolkit.getProperty("wsport""8888"); 
                URL url = null
                try { 
                        URL baseUrl; 
                        baseUrl = lavasoft.wsclient.Java6WSService.class.getResource("."); 
                        url = new URL(baseUrl, "http://" + wsip + ":" + wsport + "/java6ws/Java6WS?wsdl"); 
                } catch (MalformedURLException e) { 
                        logger.warning("Failed to create URL for the wsdl Location: '"+"http://" + wsip + ":" + wsport + "/java6ws/Java6WS?wsdl"+"', retrying as a local file"); 
                        logger.warning(e.getMessage()); 
                } 
                JAVA6WSSERVICE_WSDL_LOCATION = url; 
        } 

......
 
到此,大功告成了,你的客户端代码具有了可配置功能了。可以不再担心服务端如何部署了。
 
运行一把看看:
 
由于客户端生成的代码超多,不能一一贴出,也没必要,详细源码请查看附件。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/228026,如需转载请自行联系原作者
相关文章
|
11月前
|
Java 数据库连接 数据库
Java 组件详细使用方法与封装实战指南
本指南详解Java核心组件使用与封装技巧,涵盖跨平台开发、面向对象编程、多线程、数据库操作等关键内容,并提供工具类、连接池、异常及响应结果的封装方法。结合Spring框架、MyBatis、Spring Boot等主流技术,助你掌握高质量Java组件设计与开发实践。
295 2
|
12月前
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
13921 33
MCP客户端调用看这一篇就够了(Java版)
|
12月前
|
存储 网络协议 Java
Java获取客户端IP问题:返回127.0.0.1
总结:要解决Java获取客户端IP返回127.0.0.1的问题,首先要找出原因,再采取合适的解决方案。请参考上述方案来改进代码,确保在各种网络环境下都能正确获取客户端IP地址。希望本文对您有所帮助。
714 25
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
758 15
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
437 0
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】