`
rcfeng
  • 浏览: 122543 次
  • 性别: 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接口

    总结,本教程详细介绍了如何利用Spring Boot和Apache CXF搭建Web Service服务端,以及使用JAX-WS的`javax.xml.ws.Service`和Apache CXF的`JaxWsProxyFactoryBean`两种方式实现Java客户端调用。这些技能对于开发者来...

    客户端编程方式调用webservice

    在本案例中,文件`ws_client03`可能包含了客户端调用WebService的代码示例,而`ws_server`则可能是WebService的服务端实现。通常,服务器端代码会定义服务接口和实现,然后通过一个容器(如Tomcat)部署,使其可以...

    webservice四种发布方式及客户端调用

    ### WebService 四种发布方式及客户端调用详解 #### CXF 方式 CXF 是一个流行的开源框架,用于构建 SOAP 和 RESTful 的 Web 服务。它与 Spring 框架有着良好的集成度,因此成为了许多项目的首选。然而,正如作者所...

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

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

    webservice五种发布方式及客户端调用.pdf

    【WebService五种发布方式及客户端调用】 在IT行业中,WebService是一种基于标准的、平台无关的通信机制,用于不同系统间的数据交换。本篇主要讨论的是使用CXF和Axis2两种方式来发布WebService以及客户端如何调用...

    Java调用WebService(客户端)

    以下是一个完整的Java WebService客户端调用示例,包含了HttpGet和HttpPost两种方式: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io....

    在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

    在axis2+spring的环境下,可以通过两种方式处理session: - **SOAP Header**:可以将session信息封装在SOAP消息的Header部分,每次请求时携带。 - **Cookie**:客户端和服务端可以通过Cookie来维护会话状态,但...

    Xfire客户端调用webservice jar包

    Xfire可能使用了其中的一种或两种方式来与服务器交互。 调用Web服务的Java库,如Apache CXF、axis2或者JAX-WS(Java API for XML Web Services),可以帮助开发者轻松地创建和消费Web服务。这些库提供了客户端代理...

    webservice的动态调用和静态调用

    在开发中,我们通常会遇到两种调用方式:动态调用和静态调用。这两种方法各有特点,适用于不同的场景。 静态调用是通过在项目中添加Web引用或者服务引用来实现的。这种调用方式在编译时就已经确定了服务接口,因此...

    WebService服务的三种调用方式

    除了上述两种手动编写代码的方式外,还可以利用工具来自动生成客户端代码,这种方式可以极大地提高开发效率。 1. **工具推荐**: - WsImport:Java SE自带的一个工具,用于从WSDL文件生成客户端代码。 - CXF:一...

    CXF 一个完整的webService(整合客户端和服务端)

    CXF的客户端支持动态代理和静态代理两种方式。动态代理适合于服务端WSDL不可预知的情况,而静态代理则适用于已知WSDL的情况。 1. 动态客户端:通过CXF的WSDL2Java工具,根据WSDL生成客户端代码。 2. 静态客户端:...

    C# WebService 客户端 服务器 Json

    这两种技术都可以创建SOAP(Simple Object Access Protocol)和RESTful类型的WebService,后者更倾向于使用Json进行数据传输。 二、C# WebService客户端 1. ASMX客户端:在C#中调用一个ASMX WebService,可以通过`...

    PB 调用webservice 几种方式

    这种方式需要手动构建和解析XML消息,虽然灵活性高,但相比前两种方法,开发工作量会增加。 4. **JDBC/ODBC Bridge to Web Services**: 对于已经具备数据库连接能力的应用,PB 11.5也提供了通过JDBC或ODBC桥接器...

    webService客户端和调用服务

    5. **JAR包的作用**:在压缩包中提到的“webService”和“webService_khd”可能包含了JAX-WS或者其他相关库的JAR文件,这些文件是运行Web服务客户端和调用服务所必需的。例如,它们可能包含了处理HTTP请求、解析XML...

    webservice 客户端 服务端实例 代码

    WebService是一种基于XML的标准化方式,用于在不同的应用程序之间交换数据和实现互操作性。它允许不同平台、语言和系统之间的服务调用,基于SOAP(Simple Object Access Protocol)协议进行通信,通过HTTP协议进行...

    webservice发布及调用

    Axis2 提供了两种发布 WebService 的方式:打包发布和不打包发布。本文主要介绍不打包发布的方式,这种方式类似于 XFire,适用于遇到兼容性问题的情况。 **步骤详解:** 1. **添加 JAR 包:** - 从 Axis2 的 WAR ...

    .net调用webservice接口例子

    在.NET框架中,调用Web服务接口是常见的数据交互方式,尤其在分布式系统或跨平台通信中。本示例将详细讲解如何使用.NET来调用一个WebService接口,并提供相关的代码实例。 首先,让我们理解Web Service的基本概念。...

Global site tag (gtag.js) - Google Analytics