- 浏览: 734012 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
18335864773:
看了楼主写的用jxl生成excel。有地方用到了流,还特别强调 ...
jxl导出excel文件简单示例 -
shaoshou111:
查看Apache的并发请求数及其TCP连接状态netstat ...
Linux查看连接数,并发数 -
gengjunshi:
非常感谢哈,刚好在学webservice编程,很有用呢。
JAX-WS开发webservice示例详解 -
zcgewu:
encrypt2()和encrypt()有什么区别
JAVA实现AES加密 -
java爱好者92:
ireport的操作还是相对比较复杂的,帆软报表会相对简单一点 ...
iReport报表开发中常见的问题
用wsdl2java简化客户端的编写
也许有很多读者会说“有没有搞错啊,只调用两个WebService方法用要写这么多代码,太麻烦了”。
不过幸好Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。
一、生成WDSL文件
首先在Service项目写接口类。如FeiAction
得到src下的class文件拷到classes的文件中。
更改Java2wsdl.bat的内容。指向FeiAction的位置。
设置WEB SERVICE的地址
要注意。一般为:
http://localhost:8080/projectName/services/WSDLNAM
就生成name.wsdl。
二、生成java类
更改wsdl2java.bat的内容。
运行Java2wsdl.bat。可得到我们配置的文件。
把生成的java配置文件拷到service项目与Client项目之中。
三、并引用classes下所有的jar包到Serivice项目与Client项目中。
四、在web.xml中添加以下代码
五、在web-inf/server-config.wsdd中把生成deploy.wsdd的代码拷入。
六、启动Tomcat。用http://localhost:8080/projectName/services来查看是否成功。
七、在service项目中实现WDSL新生成的接口类。
八、客户端
上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中,类名为方法名,例如,getGreeting方法的参数都封装在了GetGreeting类中,要想调用getGreeting方法,必须先创建GetGreeting类的对象实例。
在客户端调用应用服务器上发布出来的WSDL,以实现登陆时获取应用服务器上的某些信息反馈到客户端。现在就简单讲讲在客户端调用WSDL的步骤吧。之前写过两个不同应用服务器之间相互调用WSDL的程序,用的是axis。所以这里就把以前的代码拷贝过来,稍做修改,并且将“axis.jar”,“axis-ant.jar”,“commons-discovery-0.2.jar”,“jaxrpc.jar”,“saaj.jar”,“wsdl4j-1.5.1.jar”这些包拷到客户端的lib下(也不知道哪个有用,哪个没用,反正就拷了这些)。运行的时候,有错误,错误如下:
org.apache.axis.utils.JavaUtils isAttachmentSup
ported
警告: Unable to find required classes (javax.activation.DataHandler and javax.ma
il.internet.MimeMultipart). Attachment support is disabled.
Exception in thread "Thread-5" java.lang.NoClassDefFoundError: javax/wsdl/Operat
ionType……
解决问题:把服务端用的jar包都引入
AxisFault
faultCode: {http://xml.apache.org/axis/}Server.NoService
faultSubcode:
faultString: The AXIS engine could not find a target service to invoke! targetService is null
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:hx-77d2243bcef6
The AXIS engine could not find a target service to invoke! targetService is null
原因:这是因为url的址指向的不是所用的targetService而导致的。
解决问题:把url的地址指向server-config.wsdd中service name="serviceName"的地址即可。就是在Java2wsdl.bat设置WEB SERVICE的地址。
WSDL 文档在Web服务的定义中使用下列元素:
Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。
Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
Binding - 特定端口类型的具体协议和数据格式规范的绑定。
Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
Service - 相关服务访问点的集合。
最后,读取文件
也许有很多读者会说“有没有搞错啊,只调用两个WebService方法用要写这么多代码,太麻烦了”。
不过幸好Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。
一、生成WDSL文件
首先在Service项目写接口类。如FeiAction
public interface FeiAction { public String getGreeting(String name); }
得到src下的class文件拷到classes的文件中。
更改Java2wsdl.bat的内容。指向FeiAction的位置。
设置WEB SERVICE的地址
要注意。一般为:
http://localhost:8080/projectName/services/WSDLNAM
就生成name.wsdl。
二、生成java类
更改wsdl2java.bat的内容。
运行Java2wsdl.bat。可得到我们配置的文件。
把生成的java配置文件拷到service项目与Client项目之中。
三、并引用classes下所有的jar包到Serivice项目与Client项目中。
四、在web.xml中添加以下代码
<listener> <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class> </listener> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet> <servlet-name>SOAPMonitorService</servlet-name> <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping>
五、在web-inf/server-config.wsdd中把生成deploy.wsdd的代码拷入。
六、启动Tomcat。用http://localhost:8080/projectName/services来查看是否成功。
七、在service项目中实现WDSL新生成的接口类。
八、客户端
package com.hongxing.soap.fei.service.action; import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.rpc.ServiceException; import com.hongxing.soap.fei.service.FeiActionServiceLocator; public class StubClient { private static String wsUrl="http://localhost:8080/wsdlService/services/Feiservice"; public static void main(String[] args){ FeiActionServiceLocator serviceLocator = new FeiActionServiceLocator(); try { URL url = new URL(wsUrl); com.hongxing.soap.fei.service.FeiAction ff= serviceLocator.getFeiservice(url); String ff1 = ff.getGreeting("爱人"); System.out.println(ff1); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中,类名为方法名,例如,getGreeting方法的参数都封装在了GetGreeting类中,要想调用getGreeting方法,必须先创建GetGreeting类的对象实例。
在客户端调用应用服务器上发布出来的WSDL,以实现登陆时获取应用服务器上的某些信息反馈到客户端。现在就简单讲讲在客户端调用WSDL的步骤吧。之前写过两个不同应用服务器之间相互调用WSDL的程序,用的是axis。所以这里就把以前的代码拷贝过来,稍做修改,并且将“axis.jar”,“axis-ant.jar”,“commons-discovery-0.2.jar”,“jaxrpc.jar”,“saaj.jar”,“wsdl4j-1.5.1.jar”这些包拷到客户端的lib下(也不知道哪个有用,哪个没用,反正就拷了这些)。运行的时候,有错误,错误如下:
org.apache.axis.utils.JavaUtils isAttachmentSup
ported
警告: Unable to find required classes (javax.activation.DataHandler and javax.ma
il.internet.MimeMultipart). Attachment support is disabled.
Exception in thread "Thread-5" java.lang.NoClassDefFoundError: javax/wsdl/Operat
ionType……
解决问题:把服务端用的jar包都引入
AxisFault
faultCode: {http://xml.apache.org/axis/}Server.NoService
faultSubcode:
faultString: The AXIS engine could not find a target service to invoke! targetService is null
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:hx-77d2243bcef6
The AXIS engine could not find a target service to invoke! targetService is null
原因:这是因为url的址指向的不是所用的targetService而导致的。
解决问题:把url的地址指向server-config.wsdd中service name="serviceName"的地址即可。就是在Java2wsdl.bat设置WEB SERVICE的地址。
WSDL 文档在Web服务的定义中使用下列元素:
Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。
Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
Binding - 特定端口类型的具体协议和数据格式规范的绑定。
Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
Service - 相关服务访问点的集合。
最后,读取文件
try{ File file = new File(apkPath); SAXReader reader = new SAXReader(); Document doc = (Document) reader.read(file); Element root = (Element) doc.getRootElement(); Element foo; Iterator it = root.elementIterator("update"); //遍历更新节点 while(it.hasNext()) { foo = (Element) it.next(); //转到小写 String type = foo.attributeValue("type").trim().toLowerCase(); if(phoneType!=null && !"".equals(phoneType)) phoneType = phoneType.toLowerCase(); //如果节点中手机类型与终端上传手机类型不一致,则继续查找 if(!type.equals(phoneType)){ continue; }else{//一致,返回相应型号机型apk所在目录及该机型的最新版本,用#隔开 versionResult = foo.attributeValue("filePath").trim() + "#" + foo.attributeValue("version").trim(); break; } } } catch (Exception e) { e.printStackTrace(); }
- classes.rar (2.3 MB)
- 下载次数: 87
- server-config.rar (1.6 KB)
- 下载次数: 108
- MyEclipse_xFire开发.zip (478.1 KB)
- 下载次数: 33
发表评论
-
nginx反向代理后,打开页面很慢
2020-05-26 11:26 5176nginx反向代理后,打开页面很慢 在做前后端完全分离的 ... -
【国】前后端国际化的问题
2020-04-23 17:21 1013前端有国际化,但是后端service无法使用国际化。 原 ... -
(转)Java jacob调用打印机打印word文档
2017-12-01 17:33 3765折腾了好久,最终决定由用一个第三方的,找到了jacob,还不 ... -
BIRT参数设置详解
2016-05-18 15:15 4404在使用birt报表的时候感 ... -
gson的使用分享
2016-01-15 13:48 1837一、 最基本的对象与JSON相互转换 1、 定义java对象 ... -
(转)FindBugs规则整理
2015-12-18 10:40 6622FindBugs是基于Bug Patterns ... -
Gson注解和GsonBuilder
2015-04-07 11:49 1698//注意这里的Gson的构建方式为GsonBuilder, ... -
javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
2014-06-04 20:26 1820javax.xml.ws.soap.SOAPFaultExce ... -
照片打包下载
2014-05-22 09:32 1229设计思路: 通过业务表中照片编号获得需要下载的照片列表 ... -
Oracle merge 合并
2013-10-21 09:38 1327@Transactional public void ... -
httpclient测试请求方法
2013-09-22 15:24 3701貌似很多人不知道服务器端代码怎么写,在此mark一下: ... -
jxl导入excel
2013-09-17 16:56 934jxl读取excel和写excel基本类似,只是Writab ... -
findbugs清理总结
2013-08-19 14:45 3017findbugs警告26个。主要有以下9类问题。 1、B ... -
JAX-WS开发webservice示例详解
2013-08-09 11:06 24077目录: 概述 实验环境 服务端的实现 客户端的实 ... -
REST和SOAP:谁更好,或者都好?
2013-08-09 09:46 911如今,Web开发者的可 ... -
将传进来的十六进制表示的字符串转换成byte数组 文件下载
2013-06-06 22:36 1794/** * 将传进来的十六进制表示的字符串转换成by ... -
Java:定时启动线程及线程池的用法
2013-05-23 18:01 3980这里提供两种在指定时间后启动线程的方法。一是通过java.ut ... -
依赖倒转原则
2013-04-13 12:31 995A、高层模块不应该依赖低层模块,两个都应该依赖抽象。 B、抽象 ... -
策略模式
2013-04-12 17:31 1033策略模式:它定义了算法家族,分别封装起来,让它们之间可以互相替 ... -
调用xfire发布的wsdl遇到的问题
2013-02-20 14:25 1164java.lang.NoClassDefFoundError ...
相关推荐
【使用Axis自动生成WebService客户端代码】是Web服务开发中的一个重要步骤,它简化了客户端调用Web服务的过程。本文档主要介绍了如何使用Axis工具生成客户端代码,以Myeclipse7.0为开发环境,axis1.4为工具版本,...
【使用Axis自动生成WebService客户端代码】是Web服务开发中的一个重要步骤,它简化了与服务交互的复杂性。本文档主要介绍了如何在MyEclipse 7.0环境下利用Axis 1.4工具生成客户端代码,以便调用并测试Webservice。 ...
本篇文章将详细探讨如何使用Axis自动生成访问Web服务的代码,以及相关的Java和Web服务知识。 一、Web服务简介 Web服务是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的应用程序,可以在不同系统之间交换数据。它们...
- 运行Axis2工具:使用命令行或者通过 Axis2的管理界面,输入WSDL文件的URL, Axis2会自动生成对应的客户端Java源代码和配置文件。 - 编译生成的源代码:这些源代码包含了客户端调用服务所需的所有类。 - 运行...
1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web服务接口。这个类通常会遵循SOAP协议,定义服务操作。例如,你可以创建一个名为`HelloWorldService`的类,包含一个`sayHello`...
标题提及的“axis2支持webservice 自动生成代码客户端服务端代码插件”,是指Apache Axis2为Eclipse IDE提供的一套工具,旨在简化Web服务的开发流程。这个插件允许开发者通过WSDL(Web Services Description ...
而Axis2是Apache软件基金会的一个项目,专门用于处理Web服务的生成、部署和消费。通过整合Spring和Axis2,我们可以利用Spring的依赖注入(DI)和管理功能,同时享受Axis2的高性能和易用性。 集成Spring和Axis2的...
例如,对于`HelloWorldService`,Axis2会自动生成一个`HelloWorldServiceStub`类,你可以使用这个类来调用服务。 ```java HelloWorldServiceStub stub = new HelloWorldServiceStub(...
Axis1.4会根据这些类自动生成Web服务所需的部署描述文件(wsdd)和JavaServer Pages(JSP)。 3. **生成服务端**:使用`wsdl2java`命令,将Java类转换为WSDL文件,然后使用`deploy`命令将服务部署到Web服务器上。...
使用cxf wsdl2java生成webservice客户端命令
第三种方式是利用axis2插件,将wsdl文件自动生成客户端代码,此种方式在myeclipse安装axis2.txt文件中已经做了详细介绍。 备注:资源超过了70M 分成了3部分 见axis2方式开发webservice(一)和 axis2方式开发...
在本文中,我们将深入探讨如何使用Spring、Axis2和Maven构建一个基于Java的Web服务(WebService)服务端示例。这些技术的结合为开发人员提供了高效、灵活且可扩展的解决方案来创建和消费Web服务。 首先,让我们了解...
Axis提供了从WSDL(Web服务描述语言)到Java代码的生成,以及从Java类到WSDL的逆向工程,使得开发Web服务变得简单。 要将SpringBoot与Axis结合,我们需要以下步骤: 1. **创建SpringBoot项目**:首先,我们需要一...
Axis1会在服务部署后自动生成WSDL文件,它定义了服务的接口和操作。 7. **调用服务**:客户端应用可以通过发送SOAP请求到服务端点地址来调用Web服务。请求应该包含在SOAP消息中,消息体包含调用的具体方法和参数。 ...