`
ericFang
  • 浏览: 99821 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

WebServices axis

    博客分类:
  • J2EE
阅读更多
客户端                                                      远程对象
  |                                                        |
stub(存根) ----     协议(soap/rmi-iiop/iiop...)---   skeleton(骨架) 
       
对象序列化后传到我的JVM再把它转化成对象
序列化都要解压,效率低。
存根(STUB)代理,远程对象在客户端的代理。代理里面来封装访问细节,怎么压包,解压。
skeleton(骨架)解成JAVA对象,压缩,
分布通信,存根和骨架的通信。
是一个典型的代理。
异构系统整合,多语言开发,效率差。


使用Axis在Tomcat下发布Webservice有如下几个步骤:

(1)用JavaBean写好要发布的服务的定义

(2)使用Java2WSDL命令,根据JavaBean生成WSDL文件

(3)使用Wsdl2Java命令,根据WSDL文件生成服务端源代码,以及deploy.wsdd文件

(4)根据deploy.wsdd文件在tomcat下发布Webservice服务       

deploy.bat

set axis_home=E:\java-tool\axis-bin-1_4\lib
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.client.AdminClient -l"http://localhost:9000/axis/services/UserManage" deploy.wsdd 

java2wsdl.bat

java org.apache.axis.wsdl.Java2WSDL -n "urn:UserManage"  -p"com.huawei.mtv.commons.services" "urn:UserManage" -o "UserManage.wsdl" -l "http://localhost:8080/axis/services/UserManage"   com.huawei.mtv.commons.services.UserManage

wsdl2java.bat

java org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true UserManage.wsdl


http://blog.csdn.net/zhangzhaokun/category/606327.aspx
分享到:
评论
15 楼 ericFang 2012-02-24  
ONE:XSD和WSDL接口定义
   XSD文件主要是定义请求消息和响应消息格式,WSDL定义服务和操作;XSD和WSDL接口文档定义是用来利用axis2工具,自动生成服务端代码,做准备的。XSD,WSDL定义(采用XMLSPY工具进行定义);

TWO:服务端和客户端代码生成
   生成服务端代码命令:
   WSDL2Java -uri demo.wsdl -p com.test.ws.skeleton -d xmlbeans -s -ss -sd -ssi -o D:/serverSrc
   生成客户端包代码命令:
   WSDL2Java -uri demo.wsdl -p com.test.ws.skeleton -d xmlbeans -s -o D:/clientSrc
  WSDL2Java命令参数说明:
  -uri  指定*.wsdl文件,可以带具体路径;
  -p  指定生成代码的包名
  -d xmlbeans  使用不同的数据绑定方法;
  -o  指定生成代码放置的路径;
  -ss 表示要生成服务端代码;
  -ssi 表示要生成代码中,先生成接口类,再生成实现类
Three:Ant工具打包
    1 把生成的如下服务端代码拷贝到eclipse工程下
    2 删除skeleton类(***ServiceSkeleton.java)
   3 把客户端的stub类(***ServiceStub.java)拷贝到上面服务端代码src的(skeleton)目录下
    4 编辑build.xml,在末尾加入下面target
<target if="jars.ok" name="build.aar" depends="compile.test">
<copy toDir="${classes}/META-INF" failonerror="false">
<fileset dir="${resources}">
<include name="services.xml"/>
<include name="*.xsd"/>
<include name="*.wsdl"/>
</fileset>
</copy>
<jar destfile="${lib}/${name}.aar">
<fileset dir="${classes}">
<include name="**/META-INF/*"/>
</fileset>
</jar>
</target>
<target depends="jar.client, build.aar" name="build.all"></target>
    5  执行ant在build\lib下生成了两个包:服务端aar包,客户端jar包
   
   
14 楼 ericFang 2010-07-31  
http://www.iteye.com/topic/349784
13 楼 ericFang 2010-06-24  
java -Djavax.net.ssl.keyStore=client.keystore -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.ssl.trustStore=client.truststore com.hellking.study.webservice.AuthClient

java -Djavax.net.ssl.keyStore=client.keystore -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.ssl.trustStore=client.truststore com.hellking.study.webservice.SSLAuthClient

java -Djavax.net.ssl.keyStore=client.keystore -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.ssl.trustStore=client.truststore com.hellking.study.webservice.WSSClient

set SERVER_DN="CN=hellking-Server, OU=huayuan, O=huayuan, L=BEIJINGC, S=BEIJING, C=CN"

set KS_PASS=-storepass changeit
set KS_TYPE=-storetype JKS
set KEYINFO=-keyalg RSA

keytool -genkey -dname %SERVER_DN% %KS_PASS% %KS_TYPE% -keystore server.keystore %KEYINFO% -keypass changeit
12 楼 ericFang 2010-06-24  
SOA是为了信息集成,而出现的一种新事物,它显然是超越的现有的一切技术,但是它又包含了所有的技术。SOA达到的一个目的就是面向服务,而这种面向服务的结果就是忽略任何与技术有关的东西,最终提供的都是服务接口。
其实我们还应该搞清楚面向对象和面向组件之间的区别,面向组件和面向服务的区别,SOA和web service之间的区别?
面向对象和面向组件的区别在于面向组件需要和传输协议及应用服务器的端口绑定,面向服务就是要进一步对面向组件解耦,所谓解耦就是将将业务组件和传输协议的端口解耦,既各种业务组件可以自由的绑定各种传输协议。 SOA和web service之间的区别是SOA是在web Service的基础上发展起来的,web service实现了松散耦合的服务和粗粒度的服务,但是web service本质上只是一个服务组件,它虽然采用的标准的协议,但是它是个应用服务器紧密相关的。
所以可以得出结论:SOA本身并非什么具体的技术,也不是什么架构,它是一种思想,它超越了现有的技术和架构,但是它又包含了现有技术和架构。运用这种思想要到达的目的就是做到业务和技术的完全分离,做到敏捷的、不受限制的信息集成。
11 楼 ericFang 2010-06-24  
JMS
JMS呢,是实现java领域远程通信的一种手段和方法,基于JMS实现远程通信时和RPC是不同的,虽然可以做到RPC的效果,但因为不是从协议级别定义的,因此我们不认为JMS是个RPC协议,但它确实是个远程通信协议,在其他的语言体系中也存在着类似JMS的东西,可以统一的将这类机制称为消息机制,而消息机制呢,通常是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错(详细见ErLang论文)。
来看JMS中的一次远程通信的过程:
1、客户端将请求转化为符合JMS规定的Message;
2、通过JMS API将Message放入JMS Queue或Topic中;
3、如为JMS Queue,则发送中相应的目标Queue中,如为Topic,则发送给订阅了此Topic的JMS Queue。
4、处理端则通过轮训JMS Queue,来获取消息,接收到消息后根据JMS协议来解析Message并处理。
回答问题:
1、传输的标准格式是?
JMS规定的Message。
2、怎么样将请求转化为传输的流?
将参数信息放入Message中即可。
3、怎么接收和处理流?
轮训JMS Queue来接收Message,接收到后进行处理,处理完毕后仍然是以Message的方式放入Queue中发送或Multicast。
4、传输协议是?
不限。
基于JMS也是常用的实现远程异步调用的方法之一。
10 楼 ericFang 2010-06-24  
CORBA
Common Object Request Broker Architecture (公用对象请求代理[调度]程序体系结构),是一组用来定义“分布式对象系统”的标准,由OMG(Object Menagement Group)作为发起和标准制定单位。CORBA的目的是定义一套协议,符合这个协议的对象可以互相交互,不论它们是用什么样的语言写的,不论它们运行于什么样的机器和操作系统。
CORBA在我看来是个类似于SOA的体系架构,涵盖可选的远程通信协议,但其本身不能列入通信协议这里来讲,而且CORBA基本淘汰,再加上对CORBA也不怎么懂,在此就不进行阐述了。
9 楼 ericFang 2010-06-24  
SOAP
SOAP原意为Simple Object Access Protocol,是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,可以认为SOAP是XML RPC的高级版,两者的原理完全相同,都是http+XML,不同的仅在于两者定义的XML规范不同,SOAP也是Webservice采用的服务调用协议标准,因此在此就不多加阐述了。
8 楼 ericFang 2010-06-24  
Binary-RPC
Binary-RPC看名字就知道和XML-RPC是差不多的了,不同之处仅在于传输的标准格式由XML转为了二进制的格式。
同样来回答问题:
1、传输的标准格式是?
标准格式的二进制文件。
2、怎么样将请求转化为传输的流?
将二进制格式文件转化为流。
3、怎么接收和处理流?
通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入XML中返回。
4、传输协议是?
Http。
7 楼 ericFang 2010-06-24  
XML-RPC
XML-RPC也是一种和RMI类似的远程调用的协议,它和RMI的不同之处在于它以标准的xml格式来定义请求的信息(请求的对象、方法、参数等),这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。
来看下XML-RPC协议的一次远程通信过程:
1、客户端发起请求,按照XML-RPC协议将请求信息进行填充;
2、填充完毕后将xml转化为流,通过传输协议进行传输;
3、接收到在接收到流后转换为xml,按照XML-RPC协议获取请求的信息并进行处理;
4、处理完毕后将结果按照XML-RPC协议写入xml中并返回。
图示以上过程:

同样来回答问题:
1、传输的标准格式是?
标准格式的XML。
2、怎么样将请求转化为传输的流?
将XML转化为流。
3、怎么接收和处理流?
通过监听的端口获取到请求的流,转化为XML,并根据协议获取请求的信息,进行处理并将结果写入XML中返回。
4、传输协议是?
Http。
6 楼 ericFang 2010-06-24  
来看下基于RMI的一次完整的远程通信过程的原理:

客户端发起请求,请求转交至RMI客户端的stub类;
stub类将请求的接口、方法、参数等信息进行序列化;
基于socket将序列化后的流传输至服务器端;
服务器端接收到流后转发至相应的skelton类;
skelton类将请求的信息反序列化后调用实际的处理类;
处理类处理完毕后将结果返回给skelton类;
Skelton类将结果序列化,通过socket将流传送给客户端的stub;
stub在接收到流后反序列化,将反序列化后的Java Object返回给调用者。
根据原理来回答下之前学习应用级协议带着的几个问题:

传输的标准格式是什么?
是Java ObjectStream。
怎么样将请求转化为传输的流?
基于Java串行化机制将请求的java object信息转化为流。
怎么接收和处理流?
根据采用的协议启动相应的监听端口,当有流进入后基于Java串行化机制将流进行反序列化,并根据RMI协议获取到相应的处理对象信息,进行调用并处理,处理完毕后的结果同样基于java串行化机制进行返回。
传输协议是?
Socket。
5 楼 ericFang 2010-06-21  
http://blog.csdn.net/qsky001/archive/2009/08/20/4467934.aspx
4 楼 ericFang 2010-06-21  
set axis_home=E:\java-tool\axis-bin-1_4\lib  
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.wsdl.WSDL2Java -D -s -S true -d session c02spc100.wsdl -Nrm:soap=com.eric.soap.server -Nrm:type=com.eric.soap.vo
-D表示生成debug信息,-s表示生成webservice服务端代码,-S表示生成实现框架,-d session表示在生成的deploy.wsdd中指定服务的scope的属性为session,-N 表示在wsdl文件的名字空间和生成的JAVA包名间建立映射关系,-o表示生成的JAVA代码所放置的路径。
3 楼 ericFang 2010-06-21  

<wsdl:binding name="ScfPccSoapServiceEndpointPortSoapBinding"
type="impl:ScfPccSoapServiceEndpoint">

<wsdlsoap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http" />

<wsdl:operation name="addSubscriber">

<wsdlsoap:operation soapAction="" />

<wsdl:input name="addSubscriberRequest">

<wsdlsoap:body namespace="rm:soap" use="literal" />

</wsdl:input>

<wsdl:output name="addSubscriberResponse">

<wsdlsoap:body namespace="rm:soap" use="literal" />

</wsdl:output>

</wsdl:operation>
</wsdl:binding>

<wsdl:service name="ScfMobileSoap">

<wsdl:port
binding="impl:ScfPccSoapServiceEndpointPortSoapBinding"
name="ScfPccSoapServiceEndpointPort">

<wsdlsoap:address
location="https://8.1.160.88:8080/axis/services/ScfPccSoapServiceEndpointPort" />

</wsdl:port>

</wsdl:service>

</wsdl:definitions>
2 楼 ericFang 2010-06-21  
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="rm:soap"
xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="rm:soap"
xmlns:intf="rm:soap" xmlns:tns1="rm:type"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Nov 25, 2008 (03:09:06 CST)-->
<wsdl:types>
<schema targetNamespace="rm:type"
xmlns="http://www.w3.org/2001/XMLSchema">
<import
namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<complexType name="SAVP">
<sequence>
<element name="key" type="xsd:string" />
<element name="value" type="xsd:string" />
</sequence>
</complexType>
<complexType name="SPccSubscriber">
<sequence>
<element maxOccurs="unbounded" name="attribute"
nillable="true" type="tns1:SAVP" />
</sequence>
</complexType>
<complexType name="SSubscribedService">
<sequence>
<element maxOccurs="unbounded" name="attribute"
nillable="true" type="tns1:SAVP" />
</sequence>
</complexType>
<complexType name="SSubscriberQuota">
<sequence>
<element maxOccurs="unbounded" name="attribute"
nillable="true" type="tns1:SAVP" />
</sequence>
</complexType>
<complexType name="SInSubscriberParaVO">
<sequence>
<element name="subscriber" nillable="true"
type="tns1:SPccSubscriber" />
<element maxOccurs="unbounded" minOccurs="0"
name="deleteService" nillable="true"
type="tns1:SSubscribedService" />
<element maxOccurs="unbounded" minOccurs="0"
name="modifyService" nillable="true"
type="tns1:SSubscribedService" />
<element maxOccurs="unbounded" minOccurs="0"
name="addService" nillable="true" type="tns1:SSubscribedService" />
</sequence>
</complexType>

<complexType name="SReturnVO">
<sequence>
<element name="resultCode" type="xsd:int" />
<element maxOccurs="unbounded" minOccurs="0"
name="paras" nillable="true" type="tns1:SAVP" />
<element maxOccurs="unbounded" minOccurs="0"
name="subscriber" nillable="true" type="tns1:SPccSubscriber" />
<element maxOccurs="unbounded" minOccurs="0"
name="subscribedService" nillable="true"
type="tns1:SSubscribedService" />
<element maxOccurs="unbounded" minOccurs="0"
name="subscriberQuota" nillable="true"
type="tns1:SSubscriberQuota" />
</sequence>
</complexType>

</schema>
</wsdl:types>

<wsdl:message name="addSubscriberResponse">

<wsdl:part name="result" type="tns1:SReturnVO" />

</wsdl:message>

<wsdl:message name="addSubscriberRequest">

<wsdl:part name="inPara" type="tns1:SInSubscriberParaVO" />

</wsdl:message>

<wsdl:portType name="ScfPccSoapServiceEndpoint">

<wsdl:operation name="addSubscriber" parameterOrder="inPara">

<wsdl:input message="impl:addSubscriberRequest"
name="addSubscriberRequest" />

<wsdl:output message="impl:addSubscriberResponse"
name="addSubscriberResponse" />

</wsdl:operation>

</wsdl:portType>
1 楼 ericFang 2010-06-18  
http://blog.csdn.net/zhangzhaokun/archive/2009/09/23/4582977.aspx

相关推荐

Global site tag (gtag.js) - Google Analytics