webservice客户端连wsp端测试的2中方法客

 

        首先需要了解一下什么是WebService,WebService并不是一个软件,而是一个规范。这个规范与jsp,Servlet, EJB规范类似。在实际应用中会使用很多WebService的具体实现,Axis1.x就是其中之一。WebService规范使用了SOAP(Simple Object Access protol)协议,对于一般的开饭人员来说,并不需要了解SAOP协议。SOAP消息的内容是标准的XML格式,SOAP消息一般式通过HTTP协议进行传输的,但也可以通过其他的协议,如SMTP协议。

Axis1.x由Apache组织负责开发和维护。Axis1.x是第二代的WebService引擎,第一代是Apache SOAP,第二代是Axis1.x,第三代就是Axis2,Axis2采用了性能更为优越的XML解析技术,采用了面向组建的架构设计,从而具有更好的灵活性和可扩展性,并支持异步调用等高级特性

 

当客户在浏览器中输入如下URL会显示这个WebService的WSDL:

http://localhost:8099/axis2/services/Version?wsdl   这个WebService生成wsdl文档,这其实就是SOAP协议所描述的

客户端在使用WebService时需要通过上面这个URL来获得WSDL的内容,并使用WSDL来生成相应的客户端代理类(也就是我们常说的stub类)。Stub类可以隐藏访问WebService细节部分,使调用WebService服务器方法和调用本地代理类Stubs的方法一样(实际上客户调用本地代理类Stubs时会远webService服务器端上的相应被代理类上的方法)

 

 

第一种方法:

 

Axis支持三种WebService 的部署和开发,分别为: 
    1、Dynamic Invocation Interface(DII)方式 
    2、Dynamic Proxy方式 
    3、Stubs方式

Stubs方式与设计模式中的“远程代理”非常类型,建立学axis的朋友可以学学设计模式中的代理模式(远程代理)

 

在使用Stubs方式时,你可能会用到WSDL2Java.bat生成客户端代理类,WSDL2Java.bat内容如下

 set Axis_Lib=./lib
 set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
 set Output_Path=D:\workspace\doradospace\ESS_DEV\src
 set Package=com.aegon_cnooc.ess.WebService.client
 %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package%     http://vm- shaswt93/WSP/services/allEntrance?wsdl
(把这个地址改成服务器上的地址,  如果用的是本地服务的话,可以改成http://localhost:8080/项目名/services/allEntrance?wsdl, 其中allEntrance为ServiceNamespace ) 
 pause;
  •  执行WSDL2Java.bat文件,生成代理类
  •  使用代理来测试如下
     AllEntranceLocator  allEntranceLocator = new AllEntranceLocator();
     AllEntranceHttpBindingStub allEntrance = (AllEntranceHttpBindingStub)allEntranceLocator.getallEntranceHttpPort();
     System.out.println(allEntranceLocator.getallEntranceHttpPortAddress());
     System.out.println(allEntrance.execute(requestXML));//requestXML是xml报文

 

第二种方法:是使用axis1.4中提供的类

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.junit.BeforeClass;
import org.junit.Test;

public class HelloServerTest {
  
	private static String serviceName = null;
	private static String serviceUrl = null; 
		
	@BeforeClass
	public static void beforeClass(){
		//设置服务名
		serviceName = "HelloServer";
		/**
                1.设置服务URL
                2.如果是本地测试的话serviceUrl后面的"?wsdl" 可以保留,但是连WSP上测试"?wsdl"必须省略(实际上连WS那边生成的代理类是没有"?wsdl"的)
		3.serviceUrl = "http://localhost:8099/axis/services/"+serviceName+"?wsdl"; 
                */
             serviceUrl = "http://localhost:8099/axis/services/"+serviceName;//这种是通用的
	}	
	@Test
	public void testHelloServer() throws Exception{
		/**
		 * 创建调用对象
		 */
		Service service = new Service();
		Call call = (Call)service.createCall();//javax.xml.rpc.Call
		//设置URL
		call.setTargetEndpointAddress(serviceUrl);
		
		/**
		 * 设置调用WebService上的 远程方法sayHello
		 */
		call.setOperationName("sayHello");
		/**
		 * 1.执行远程调用,同时获得返回值
		 * 2.new Object[]{"gaoweigang"}给sayHello方法传参String
		 */
		String parameterName = "gaoweigang";
		String name = (String)call.invoke(new Object[]{parameterName});
		System.out.println(name);	
	}
	
}

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EJB3.1 JBoss7.0.2 EclipseJuno-helloworld实现 2013-01-06 02:59:54 分类: Java EJB3.1 JBoss7.1 Eclipse3.7---helloworld实现 一、环境配置: JDK:正常配置 Eclipse:正常下载,解压(V3.7) JBoss:正常下载,解压(V7.1) 二、JBoss Tools安装 在Eclipse里面安装JBoss Tools3.3 1、【Help】——>【Install New Software】——>【Add】 输入: Name: JBossTools Location: http://download.jboss.org/jbosstools/updates/development/indigo/ ——>【OK】——>【Select All】——>【Next】 ——>(间的步骤一直NEXT,需要选择同意)——>【Finish】 2、【Help】——>【Install New Software】——>【Add】 输入: Name: JBossTools Aop Location: http://download.jboss.org/jbosstools/updates/development/indigo/soa-tooling/ ——>【OK】——>【Select All】——>【Next】 ——>(间的步骤一直NEXT,需要选择同意)——>【Finish】 三、Eclipse里面配置JBoss 【File】——>【New】——>【Other】 (找到Server,并且选择)——>【Next】 (找到JBoss Community,选择JBoss AS 7.1)——>【Next】 (找到Home Directory)——>【Browse…】——> (选择JBoss解压的位置,即JBoss Home)——> (找到JRE,选择你安装的JRE)——>【Next】 ——>【Next】——>【Finish】 以上步骤完毕后,在Servers视图内会有JBoss服务器出现。 点击该视图内的启动按钮,JBoss服务器开始启动 浏览器可以访问http://127.0.0.1:8080/,就算配置成功。 四、第一个EJB工程 【File】——>【New】——>【Other】 (找到EJB,并且选择EJB Project)——>【Next】 输入: Project name:TestEJB Target runtime:选择JBoss7.1 EJB module version:选择3.1 ——>【Next】——>【Next】 (选择Generate ejb-jar.xml deployment descriptor) ——>【Finish】 生成的目录结构,ejbModule目录为我们要写JAVA源代码的目录。 即EJB写在这里。 在ejbModule目录上右键【New】——>【Other】 (找到EJB,并且选择Session Bean(EJB 3.x))——>【Next】 输入:包名(com.ejb)、EJB类名(HelloWorld), State type部分:选择Stateless 然后选择Remote ——>【Finish】 自动生成代码如下: package com.ejb; import javax.ejb.Remote; @Remote public interface HelloWorldRemote { } package com.ejb; import javax.ejb.LocalBean; import javax.ejb.Stateless; /** * Session Bean implementation class HelloWorld */ @Stateless @LocalBean public class HelloWorld implements HelloWorldRemote { /** * Default constructor. */ public HelloWorld() { // TODO Auto-generated constructor stub } } 在接口里面增加以下方法 public String sayHello(String name); 类里面实现该方法 public String sayHello(String name){ return "Hello this is " + name + "!"; } 五、部署EJB 在工程上右键——>【Export】——>【EJB JAR file】 在Destination处:——>【Browse…】——> 选择JBoss服务器的部署目录,我的目录如下: D:\eclipse-jboss\jboss-as-7.1.1.Final\standalone\deployments\TestEJB.jar 然后——>【Finish】 在Console视图会出现详细部署信息 六、客户代码 1、新建一个普通Java Project工程: 2、加入JBOSS运行库,及jboss\bin\client下的jboss-client.jar包 3、把EJB的接口拷贝到该工程内: 4、新建一个客户类:类名(ClientTest) 代码如下: import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import com.ejb.HelloWorldRemote; public class ClientTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Hashtable<String, String> jndiProperties = new Hashtable<String, String>(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); try { Context context = new InitialContext(jndiProperties); final String appName = ""; final String moduleName = "TestEJB"; final String distinctName = ""; Object obj = context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/HelloWorld!com.ejb.HelloWorldRemote"); HelloWorldRemote hwr = (HelloWorldRemote)obj; String say = hwr.sayHello("hiyaSoft"); System.out.println(say); } catch (NamingException e) { e.printStackTrace(); } } } 5、在classPath下增加“jboss-ejb-client.properties”文件,内容如下 remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 6、运行该客户,有如下结果: Hello hiyaSoft!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值