微信开发中如何调用自己写的webservice
来源:互联网 发布:淘宝联盟怎么赚不到钱 编辑:程序博客网 时间:2024/05/21 07:47
之前做的微信公众平台中有用到一些调用第三方的API接口,比如天气查询,公交查询等等,这使得我对第三方的Api的接口制作产生了很多的兴趣。
我的思路是,通过webservice来制作第三方的api接口,可以发布后便于微信公众平台中再次调用。好废话不多说,切入正题。第一步 我们先建立起自己的webservice
这里我选择的是Axis2(好处不多说)。
使用Axis2无需复杂、额外的配置。
(1)Axis的下载和安装
1.可从http://ws.apache.org/axis2/下载Axis2的最新版本:
可以下载如下两个zip包:
axis2-1.5.4-bin.zip axis2-1.5.4-war.zip
其中 axis2-1.5.4-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.5.4-war.zip文件用于将WebService发布到Web容器中。
2.将axis2-1.5.4-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>\webapps目录中,并启动Tomcat,在浏览器地址栏中输入如下的URL:
http://localhost:8080/axis2/,如看到axis2的主页面则安装成功
(2)使用services.xml配置文件发布
用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中。这似乎有些不方便. 为此,Axis2也允许将带包的POJO类发布成Web Service。先实现一个POJO类,代码如下:
public class MyService { <p><span style="color:#0070C0;"> public StringgetGreeting(String name)</span></p><p><span style="color:#0070C0;"> </span> {</p><p><span style="color:#0070C0;"> </span> return "<span style="color:#0070C0;">你好</span><span style="color:#0070C0;"> " + name;</span></p><p><span style="color:#0070C0;"> </span> } </p><p><span style="color:#0070C0;"> </span> public int getPrice()</p><p><span style="color:#0070C0;"> </span> {</p><p><span style="color:#0070C0;"> </span> return newjava.util.Random().nextInt(1000);</p><p><span style="color:#0070C0;"> </span> } </p> //计算五险一金的函数,简易版,主要演示效果 public floatgetInsurance(int salary) { floatinsurance=(float)(salary*0.18); return insurance; }}
将上述class文件解析完后,放入到E:\apache-tomcat-6.0.29\apache-tomcat-6.0.29\webapps\axis2\WEB-INF的pojo文件中(如果没有此文件,则创建此文件)。
注意:class不能有package名
最后通过下面的URL可以获得这个WebService的WSDL内容:
http://localhost:8080/axis2/services/MyService?wsdl
其中name属性名就是上面URL中"?"和"/"之间的部分
例如,sayHelloNew方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类,而updateData方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。
(1) 用Java实现调用WebService的客户端程序
WebService是为程序服务的,只在浏览器中访问WebService是没有意义的。(此外注意微信那边只接受80端口,我的webservice只写在本地,用于测试之用)调用WebService的客户端代码如下:
//这里是五险一金计算器的webservicepublic static voidmain(String[] args) throws Exception { // 使用RPC方式调用WebService RPCServiceClient serviceClient = newRPCServiceClient(); Options options =serviceClient.getOptions(); // 指定调用WebService的URL EndpointReference targetEPR = newEndpointReference("http://localhost:8080/axis2/services/MyService"); options.setTo(targetEPR); // 指定getGreeting方法的入参值 Integer[] salary= new Integer[] {8000}; // 指定getGreeting方法返回值的数据类型的Class对象 Class[] insurance = new Class[]{Float.class}; // 指定要调用的getGreeting方法及WSDL文件的命名空间 QName opAddEntry = new QName("http://ws.apache.org/axis2","getInsurance"); //三个参数对应调用方法名、入参和返回值 System.out.println(serviceClient.invokeBlocking(opAddEntry, salary,insurance)[0]); }}
在编写客户端代码时应注意如下几点:
1. 客户端代码需要引用很多Axis2的jar包,如果读者不太清楚要引用哪个jar包,可以在Eclipse的工程中引用Axis2发行包的lib目录中的所有jar包。
2. 在本例中使用了RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。
当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。
3. 如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。
4. 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名, 也就是<wsdl:definitions>元素的targetNamespace属性值。
第二步 如果上述测试没有问题的话,我们就可以在微信那边调用我们自己写的webservice了
if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 接收用户发送的文本消息内容 String content = requestMap.get("Content"); //五险一金计算器 if (content.startsWith("工资")) { String keyWord = content.replaceAll("^工资", "").trim(); if ("".equals(keyWord)) { textMessage.setContent(CalculatorHelper.getCalculatorHelper()); } else { String wxyj=MyWebService.searchWxyj(keyWord); textMessage.setContent("您所需要缴纳的五险一金是"+wxyj); } respMessage = MessageUtil.textMessageToXml(textMessage); }此处是微信服务器与本机服务器交互的核心代码,如果有不清楚的话,可以去看柳峰的博客
以上程序主要实现了以下功能
用户输入自己的工资,我的微信公众账号就会返回一个所五险一金的金额给他。
- 微信开发中如何调用自己写的webservice
- andorid 调用自己写的WebService
- Python中如何调用自己写的函数
- Python如何调用自己写的包
- 如何调用自己写的python函数?
- 如何在自己的工程中调用自己写的.lib文件
- JAVA如何调用.NET开发的WebService
- webservice(自己写的webservice)
- 如何调用继承了httpservlet的类中自己写的方法
- android 如何调用talk程序,集成到自己写的应用中
- 如何在matlab sfunction 函数中调用自己写的函数?
- 在Android中调用C#写的WebService(附源代码)
- 在Android中调用C#写的WebService(附源代码)
- 微信公众号开发 调用图灵机器人的接口使自己的微信成为一个智能机器人
- 自己写的tool如何调用bios runtime code
- 如何使自己写的OnDraw函数被调用
- domino6中如何调用webservice
- ruby中如何调用webservice
- 我想我已爱上你——下机之策略模式(一)
- 音视频开发技术之自主集成第三方编解码器
- intent 组件
- 使用Python进行字符串加密 利用win32com.client和CAPICOM
- 外包服务
- 微信开发中如何调用自己写的webservice
- 轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒
- vim显示行号、语法高亮、自动缩进的设置
- python中的None
- NSArray的sorting排序
- SMARTFORMS生成PDF
- 医疗设备漏费管理系统
- 6.用户态和内核态的区别
- 使用ping命令时让数据包从指定网卡发送出去