`
rcfeng
  • 浏览: 122189 次
  • 性别: Icon_minigender_1
  • 来自: 郴州
社区版块
存档分类
最新评论

WebService的两种客户端调用方式

阅读更多
WebService的两种客户端调用方式


1.先搭建一个WebService接口.

接口类:
package hello;

public interface IHello {
	
	public String hello(String str,String str2) ;

}


实现类:
package hello;

public class Hello implements IHello{

	public String hello(String str,String str2) {
		return "Hello world ,i'am "+str+".   第二个参数 = "+str2 ;
	}

}


services.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<service>
		<name>Hello</name>
		<namespace>rcfeng</namespace>
		<serviceClass>hello.IHello</serviceClass>
		<implementationClass>hello.Hello</implementationClass>
	</service>
</beans>


web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>



注:这里使用XFire搭建WebService,固然需要引用XFire包,以及写法为XFire,不管用什么框架搭建WebService,访问原理都是一样的,所以用任何的客户端都可以访问,需要导入的包在文章尾部注明.


2.下面介绍调用WebService的两种客户端:

2.1 XFire客户端:

XFire客户端访问WebService,需要模拟出WS的接口,接口的结构一般定义接口的服务商会提供,如果是自己写的那就更明确了..

模拟WebService接口(这个接口写法跟WS服务器是一样的,但不是同一个项目也不是同一个类):

客户端接口类:
这里起名AnyName,意思是任何模拟接口的任何名字都可以,只要需要调用的方法的结构与WS相同即可.
package xfire;

public interface IAnyName {
	
	public String hello(String str,String str2) ;

}



客户端调用类,测试类:
package xfire;

import org.codehaus.xfire.XFire;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class XFireTest {

	public static void main(String[] args) {
		
		try {
			
			String url = "http://localhost:9415/rcfeng-WebService/services/Hello" ;
			
			Service service = new ObjectServiceFactory().create(IAnyName.class) ;
			
//			XFire fire=XFireFactory.newInstance().getXFire();
//			XFireProxyFactory factory=new XFireProxyFactory(fire);
			XFireProxyFactory factory = new XFireProxyFactory() ;
			
			IAnyName hello = (IAnyName) factory.create(service,url) ;
			
			String str = hello.hello("rcfeng","Parameter two") ;
			
			System.out.println(str);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}


2.2 Axis客户端:
package axis;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

public class AxisTest {
	
	public static void main(String[] args) {
		
		try {
			
			String str = "rcfeng" ;
			String endpoint = "http://localhost:9415/rcfeng-WebService/services/Hello" ;
			
			Service service = new Service() ;
			
			Call call = (Call) service.createCall() ;
			
			call.setTargetEndpointAddress(endpoint) ;
			call.setOperationName("hello") ;//ws方法名
			//一个输入参数,如果方法有多个参数,复制多条该代码即可,参数传入下面new Object后面
			call.addParameter("parameter1",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;
			call.addParameter("parameter2",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;
			call.setReturnType(XMLType.XSD_STRING) ;
			call.setUseSOAPAction(true) ;
//			call.setSOAPActionURI("http://172.20.35.123:6110/cea-ws/services/ChangeMemberPinService");
			
			String result = (String) call.invoke(new Object[]{str,"Parameter two"}) ;
			
			System.out.println(result);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}




以上代码本人测试通过.

顺便说一点个人理解:


XFire客户端的调用方式,类似于先指定WS接口的结构,然后从远端地址实例化一个对象到本地,由于方法结构一样,所以可以强行转换.然后直接进行本地调用.

Axis客户端的调用方式类似于HTTP访问,设置好参数后直接远端调用.


?wsdl地址的来源=服务商提供,如果是你自己做的WebService的话,你可以访问默认格式:

http://[IP地址:端口]/[项目访问路径]/services



http://localhost:9415/rcfeng-WebService/services


至于url的源来,你要先拿到?wsdl地址,然后访问如:

http://localhost:9415/rcfeng-WebService/services/Hello?wsdl ,然后拉到下面可以看到红色部分:
<wsdl:service name="Hello">
    <wsdl:port name="HelloHttpPort" binding="tns:HelloHttpBinding">
        <wsdlsoap:address location="http://localhost:9415/rcfeng-WebService/services/Hello" />
    </wsdl:port>
</wsdl:service>

调用的方法名为:
<wsdl:operation name="hello">


然后便可以调用WebService的接口了。


XFire需要用到的包:
activation-1.1.jar
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-httpclient-3.0.jar
commons-logging-1.0.4.jar
jaxen-1.1-beta-9.jar
jaxws-api-2.0.jar
jdom-1.0.jar
jsf-api.jar
jsf-impl.jar
jsr173_api-1.0.jar
jstl-1.2.jar
mail-1.4.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
spring-1.2.6.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.0.jar
xbean-2.2.0.jar
xbean-spring-2.8.jar
xfire-aegis-1.2.6.jar
xfire-annotations-1.2.6.jar
xfire-core-1.2.6.jar
xfire-java5-1.2.6.jar
xfire-jaxws-1.2.6.jar
xfire-jsr181-api-1.0-M1.jar
xfire-spring-1.2.6.jar
XmlSchema-1.1.jar

Axis需要用到的包:
axis.jar
commons-discovery-0.2.jar

注明:以上两种客户端本人是写在同一个项目里,所以Axis需要用到的包看上去少很多,是因为一些通用包在使用XFire的时候已经加进来了.

附上项目说明:
rcfeng-WebService 为WebService服务端项目
rcfeng-TestWebService 为客户端项目

rcfeng-WebService项目中没有包,可以到rcfeng-TestWebService\WebRoot\WEB-INF\lib\XFire\下获取,另外,rcfeng-WebService项目中是使用MyEclipse引用包,直接导入项目可能需要更新jar路径或删掉路径,然后自己导入jar包

分享到:
评论
4 楼 ken2su 2014-10-13  
wsdl:service name="Hello 太感谢了,很有用!
3 楼 上帝之子 2014-05-06  
qq962918311 写道
你好,如果远程调用webservice,服务商提供的参数是个对象,那我怎么传参数呢???

同问,一般对象参数会有服务端参数为null,客户端报Adding text to an XML document must not be null
2 楼 qq962918311 2014-03-12  
你好,如果远程调用webservice,服务商提供的参数是个对象,那我怎么传参数呢???
1 楼 wusuobuai 2013-10-15  
很好 适合初学者

相关推荐

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口

    WebService客户端调用WebService服务示例代码——java

    WebService客户端调用WebService服务示例代码,java代码,纯手工,包括直接httpClient直接发送Saop报文调用和利用wsimport -keep 生成客户端代码后调用两种方式的示例。因涉及商务账户密码隐私,因此代码中的有些账号...

    springboot+webservice搭建webservice服务端

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用

    c# 三种方法调用WebService接口

    生成.cs文件的方法有两种,如下: 方法一:通过VS命令行工具生成 如上图所示,输入命令“wsdl /language:c# /n:CHEER.PresentationLayer /out:生成类的物理路径(需先创建cs文件) WebService接口URL或wsdl

    java调用webservice .

    调用webservice,可以首先根据wsdl文件生成客户端,或者直接根据地址调用,这里主要讨论直接调用地址的两种不同方式:axis和Soap,soap方式主要是用在websphere下

    webservice教程

    WebService是一种跨编程语言和跨操作系统...除了WebService外,常见的远程调用技术还有RMI(Remote method invoke)和CORBA,由于WebService的跨平台和跨编程语言特点,因此比其他两种技术应用更为广泛,但性能略低。

    几种访问和发布webservice服务的示例

    包含两个工程,服务端和客户端。jdk和cxf两种方式发布和调用webservice;调用网络上的webservice服务的两个示例;不明白的留言

    webservice.zip

    java webservice的发布与访问,包括服务端与客户端,客户端调用包括生成代码本地调用,远程服务调用两种方法,简便的实现方式,普通java项目,无需导入jar包

    Ejb开发webservice

    用Ejb3开发的webservice。数据库连接用的是dbutils。介绍了两种webservice的调用或测试方法:客户端调用和soapui工具测试。

    WebService上传下载文件

    用webservice作为服务器端,以流的方式实现文件的上传和下载,可以自动调用winrar进行压缩和加密,支持多线程和...客户端有winform和服务两种方式的实现。都进行了良好的重构,可以方便地嵌入到其它系统内。阿弥陀佛。

    webservice Axis2教程

    这两种调用方式分别封装在两组Model类中。可以通过配置 struts.xml文件来提定使用哪组模型类(调用方式)。第三个项目使用了C#来实现PIM。这个项目的目的是为了演示如何将.net技术与Java 技术集成来实现一个完整的...

    最全面的 PHP webservice 接口,服务器端,客户端接口

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术。仅仅有通过Web Service,client和server才可以自由的用HTTP进行通信。不论两个程序的平台和变成语言是什么。 XML、SOAP和WSDL是Web Service平台的三大...

    传智播客Android视频教程-课程源码.rar

    编写代码完成添删改查操作(两种实现方法) E.事务的实现 F.采用ListView实现数据列表显示 2&gt; 采用ContentProvider对外共享数据 第四天 1&gt; 往通信录添加联系人,和获取联系人 2&gt; 网络--获取数据(图片、网页、xml...

    黎活明android教程的全程PPT

    编写代码完成添删改查操作(两种实现方法) E.事务的实现 F.采用ListView实现数据列表显示 2&gt; 采用ContentProvider对外共享数据 第四天 1&gt; 往通信录添加联系人,和获取联系人 2&gt; 网络--获取数据(图片、网页、xml...

    ofbiz综合技术文档

    一、soap应用的两种情况 91 1、ofbiz 将其他的webservice 封装成服务,这时ofbiz的应用系统可以直接调用该服务,以访问其他的Webservice: 92 2、其他的soap客户端可以通过soap访问ofbiz,这时ofbiz相当于Webservice...

    asp.net知识库

    如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且...

    net学习笔记及其他代码应用

    30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System....

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了这两种应用服务器的安装和使用,以及如何在两大主流服务器上安装、部署java ee应用。  本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,...

Global site tag (gtag.js) - Google Analytics