如何用WSDL4J构建Spring+AXIS自动创建的Web service对应客户端

简介:
如何用WSDL4J构建Spring+AXIS自动创建的Web service对应客户端
我的另一篇博文Spring集成AXIS2的Web service配置方法( http://dannyyuan.blog.51cto.com/212520/160504 )提过到如何用Spring+AXIS自动完成WSDL的定义和对象拆装/封装,简单地把Spring声明的bean所有公开方法转换成Web service方法。
而Apache项目WSDL4J则是根据WSDL的XML文档就可以自动生成Web service的客户端代码,这样的话,构建web service服务端和客户端都显得没有多少手工编码了。其实WSDL4J也是可以生成服务端代码的,可是手工编写WSDL还不如用AXIS自动生成来得快。
用WSDL4J创建客户端代码的命令如下:
java -cp %AXIS_CLASSPATH% java org.apache.axis.wsdl.WSDL2Java -o DIR_NAME -p PACKAGE_NAME  http://ws-server/proj-name/services/service-name?wsdl
其中AXIS_CLASSPATH应该包括axis.jar,commons-discovery.jar,commons-logging.jar,jaxrpc.jar,log4j.jar,saaj.jar,wsdl4j.jar,activation.jar,mail.jar。
该命令会在所指定目录下创建JAVA包,里面有[web_service]Locator.java, [web_service].java, [web_service]PortType.java, [web_service]SOAP11BindingStub.java,[web_service]SOAP12BindingStub.java,以及方法中所有涉及的参数bean等。
客户代码只需new [web_service]Locator实例,其实现了[web_service]接口,用get[web_service]SOAP11port_http(URL)方法取得方法实现对象[web_service]PortType实现,可以直接调用其方法像本地方法一样了。URL如果是HTTPS协议的,需要设SSL证书路径到系统属性配置中去(System.setProperty("javax.net.ssl.trustStore","ssl.cer");)
上面的都是简单的工具描述,可是如果不注意会出现一些意料不到的问题。
1、首先AXIS自动发布的WS方法参数会自动对应bean方法的参数名,结果在构建SOAP元素XML标签会映射过来,如果你用AOP想实现基本检验和类型检查之类的拦截的话,就要小心SOAP元素名与bean方法参数名的关系了;
2、其次WSDL2JAVA小工具好像不支持HTTPS(用户检验支持),这时可以用浏览器打开WSDL文档然后保存成文件被调用;
3、生成的JAVA代码会把URL写死(如果WSDL2JAVA工具用URL参数),所以默认创建PortType(不带参数)的方法会用到该URL;
4、如果Spring的ws 方法参数有通用类型如Object会导致序列化/反序列化去错,必须参数和返回类型保证为POJO对象或基本数据类型。

5、AXIS2有一些不同之处,需注意AXIS2基于JDK6。


本文转自 dannyy1026 51CTO博客,原文链接:http://blog.51cto.com/dannyyuan/584466




相关文章
|
1天前
|
Java 持续交付 Maven
Spring Boot程序的打包与运行:构建高效部署流程
构建高效的Spring Boot部署流程对于保障应用的快速、稳定上线至关重要。通过采用上述策略,您可以确保部署过程的自动化、可靠性和高效性,从而将专注点放在开发上面。无论是通过Maven的生命周期命令进行打包,还是通过容器技术对部署过程进行优化,选择正确的工具与实践是成功实现这一目标的关键。
8 2
|
3天前
|
存储 数据库 开发者
Flask中的蓝图与插件应用:构建模块化Web应用的利器
【7月更文挑战第19天】Flask蓝图和插件是构建模块化、可扩展和可维护Web应用的强大工具。蓝图允许你将应用分割成多个独立的部分,提高了代码的组织性和可重用性;而插件则为Flask应用提供了丰富的功能和社区支持,简化了开发过程。通过合理地使用蓝图和插件,你可以更加高效地开发出高质量的Web应用。
|
2天前
|
缓存 JavaScript 前端开发
Web Workers与Service Workers:后台处理与离线缓存
Web Workers 和 Service Workers 是两种在Web开发中处理后台任务和离线缓存的重要技术。它们在工作原理和用途上有显著区别。
11 1
|
3天前
|
前端开发 数据库 开发者
构建可维护的Web应用:Python模板引擎与ORM的协同工作
【7月更文挑战第19天】在Web开发中,可维护性至关重要。Python搭配Flask或Django框架,利用模板引擎(如Jinja2)和ORM(如SQLAlchemy或Django ORM)增强开发效率和代码质量。模板引擎桥接前后端,ORM简化数据库操作,两者协同提升可读性和可测试性。例如,Flask用Jinja2渲染动态HTML,Django通过ORM处理数据库模型。这种分离关注点的方法降低了耦合,增强了应用的可维护性。
12 1
|
10天前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
45 5
|
13天前
|
存储 Java 数据挖掘
构建基于Spring Boot的数据分析平台
构建基于Spring Boot的数据分析平台
|
13天前
|
Java 数据管理 API
构建基于Spring Boot的数据管理平台
构建基于Spring Boot的数据管理平台
|
13天前
|
安全 Java API
构建基于Spring Boot的REST API安全机制
构建基于Spring Boot的REST API安全机制
|
1天前
|
SQL 缓存 数据库
构建高效Web应用:掌握Python中的ORM映射技术
【7月更文挑战第21天】在Web开发中,数据库操作常需直接写SQL,增加复杂度与风险。ORM技术,如SQLAlchemy,通过对象关系映射简化此流程,提升效率与安全性。安装SQLAlchemy仅需`pip install sqlalchemy`,使用时定义模型映射至数据库表,通过会话对象管理事务。ORM特性如缓存、延迟加载及批量操作显著优化Web性能,减少数据库负担。掌握SQLAlchemy,开发者可聚焦业务逻辑,提升应用效能与代码质量。
5 0
|
12天前
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。