axisWebService开发指南Word下载.docx
《axisWebService开发指南Word下载.docx》由会员分享,可在线阅读,更多相关《axisWebService开发指南Word下载.docx(74页珍藏版)》请在冰豆网上搜索。
/**
*<
b>
function:
<
/b>
jws的axisWebService
*@authorhoojo
*@createDateDec15,201017:
03:
49PM
*@fileHelloWorldService.java
*@packagecom.hoo.service
*@projectAxisWebService
*@blog
*@emailhoojo_@
*@version1.0
*/
publicclassHelloWorldService{
publicStringsayHello(Stringname,intage){
returnname+"
say:
helloworld!
[axis]myageis"
+age;
}
}
4、复制HelloWorldService.java到我们刚才复制的axis文件夹下即可;
也就是tomcat下的webapps下的axis下即可;
注意:
还有重要的一般就是要将这个java文件中的包名去掉,并且将这个文件重命名为HelloWorldService.jws;
如果带包名的话,请求后编译的class将会在包路径下,这样我们在全球当前jws的时候就会出现找不到class,详细的你可以到发布在tomcat下的工程看看WEB-INF目录下的jwsClass就一目了然了。
上面的工作完成后,启动tomcat服务器,访问http:
8080/axis/HelloWorldService.jws
你会看到:
ThereisaWebServicehere
ClicktoseetheWSDL
如果你和我看到的是一样的,就证明你已经成功的部署了一个axis1.x的webService。
然后我们点击下就可以看到wsdl的xml文件了,内容如下:
?
xmlversion="
1.0"
encoding="
UTF-8"
?
>
-<
wsdl:
definitionstargetNamespace="
http:
8080/axis/HelloWorldService.jws"
xmlns:
apachesoap="
//xml.apache.org/xml-soap"
impl="
intf="
soapenc="
//schemas.xmlsoap.org/soap/encoding/"
wsdl="
//schemas.xmlsoap.org/wsdl/"
wsdlsoap="
//schemas.xmlsoap.org/wsdl/soap/"
xsd="
//www.w3.org/2001/XMLSchema"
!
--
WSDLcreatedbyApacheAxisversion:
1.4
BuiltonApr22,2006(06:
55:
48PDT)
-->
messagename="
sayHelloResponse"
<
partname="
sayHelloReturn"
type="
xsd:
string"
/>
/wsdl:
message>
sayHelloRequest"
name"
age"
int"
portTypename="
HelloWorldService"
operationname="
sayHello"
parameterOrder="
nameage"
inputmessage="
impl:
name="
outputmessage="
operation>
portType>
bindingname="
HelloWorldServiceSoapBinding"
wsdlsoap:
bindingstyle="
rpc"
transport="
//schemas.xmlsoap.org/soap/http"
operationsoapAction="
"
inputname="
bodyencodingStyle="
namespace="
//DefaultNamespace"
use="
encoded"
input>
outputname="
output>
binding>
servicename="
HelloWorldServiceService"
portbinding="
addresslocation="
port>
service>
definitions>
分析下wsdl的xml文件内容:
targetNamespace=http:
是我们部署的webservice命名空间,也就是我们访问的webService路径。
<
是返回值的信息,sayHelloResponse代表响应,即返回值,type是返回值的类型
请求方法参数信息,sayHelloRequest即请求,part是参数parameter,type是参数的类型
<
portType的name是当前webService的名称,operation是一个操作,即可以调用的方法。
name就是方法名称了,parameterOrder是参数,input输入即传入参数,output输出即返回的值;
webService的名称和绑定的信息,以及访问的url地址。
5、下面编写客户端代码
代码如下:
packagecom.hoo.client;
importjava.rmi.RemoteException;
importjavax.xml.namespace.QName;
importjavax.xml.rpc.ServiceException;
importorg.apache.axis.client.Call;
importorg.apache.axis.client.Service;
publicclassHelloWorldClient{
/**
jwsaxisWebService客户端
*@createDate2010-12-15下午05:
10:
28
*@paramargs
*@throwsServiceException
*@throwsRemoteException
publicstaticvoidmain(String[]args)throwsServiceException,RemoteException{
//webService访问地址
//Stringurl="
;
Stringurl="
//127.0.0.1:
//创建服务
Serviceservice=newService();
//创建调用句柄
Callcall=(Call)service.createCall();
//设置请求地址
call.setTargetEndpointAddress(url);
/**
*设置调用的方法和方法的命名空间;
*因为这里是手动发布到webroot目录下的,所以命名空间和请求地址一致
*当然null也可以,因为本身它就没有设置命名空间,一般方法的命名空间是
*包名倒写组成,如com.hoo.service,ns=
*/
call.setOperationName(newQName(null,"
));
*用call调用sayHello方法,设置请求的参数,返回的就是返回值了
Stringresult=(String)call.invoke(newObject[]{"
jack"
99});
System.out.println(result);
分析上面的代码
url是根据xml文件中的wsdlsoap:
addresslocation的信息得到的,命名空间和方法名称是根据
8080/axis/HelloWorldJWS.jws"
的信息得到的,而请求参数和返回值的详细信息是在
HelloWorldJWS"
里可以很详细的看到。
至于代码的call.invoke是java中反射机制,不懂的建议看看jdk文档java.lang.reflect包下的内容。
运行上面的代码就可以看到控制台输出:
jacksay:
[axis]myageis99
好了,axis的就完成了,下面我们不用官方的axis的工程,我们写一个自己的AxisWebService工程,然后发布的tomcat的webapps中看看。
6、刚才copy了lib下的jar包,现在要copy下web.xml中的内容,去掉里面的AdminServlet这个配置,其他的都可保留。
然后像刚才一样,将HelloWorldService.java复制到webroot目录下,去掉包名,并且修改后缀为HelloWorldService.jws即可。
(如果有兴趣可以看看,发布在tomcat目录下的当前工程的web-inf目录,看看里面是否多了些东西)最后发布当前web工程,访问http:
8080/AxisWebService/HelloWorldService.jws,如果看到和刚才一样的界面,证明你快成功了。
点击链接看到wsdl的xml就成功了。
好了,还没有完。
看看web.xml中的配置,你大概就知道为什么了。
web.xml中最主要的文件就是org.apache.axis.transport.http.AxisServlet,它就是webService的中央控制器;
即配置jws的后缀也在web.xml中定义的,在看看还有services/*,这就表明上面的访问路径也可以是这样的:
8080/AxisWebService/services/HelloWorldService
当然如果要这样写就需要用wsdd的发布方式,详细请看下文!
参考文档:
//ws.apache.org/axis/java/user-guide.html
二、用wsdd(WebServicesDeploymentDescriptor)方式发布WebService
wsdd方法比jws方法要稍微复杂些,但一定程度上比jws发布的方法要灵活。
1、首先在AxisWebService工程创建一个java类,里面写简单的2个方法getName、getAge,代码如下:
wsdd发布模式的axisWebService
24:
35PM
*@fileHelloWorldWSDD.java
publicclassHelloWorldWSDD{
publicStringgetName(Stringname){
return"
yourname:
"
+name;
publicintgetAge(intage){
returnage+10;
2、如果用wsdd方法首先需要定制我们的wsddxml文件,这里命名为deploy.wsdd,创建在当前web工程的WEB-INF目录下,代码如下:
deploymentxmlns="
//xml.apache.org/axis/wsdd/"
java="
//xml.apache.org/axis/wsdd/providers/java"
HelloWorldWSDD"
provider="
java:
RPC"
parametername="
className"
value="
com.hoo.service.HelloWorldWSDD"
--*代表所有的方法都暴露-->
allowedMethods"
*"
scope"
request"
/service>
/deployment>
service标签代表一个WebService服务,HelloWorldWSDD就是当前WebService的名称;
provider是java的WebService类型,分别有:
RPC、Document、Wrapped、Message、EJB、RMI;
有兴趣的可以看看org.apache.axis.providers.java包下面的WebService的实现类或是文档;
parameter的参数className代表当前WebService的class类路径;
allowedMethods代表暴露的方法,那些方法在客户端可以调用;
这个是当前WebService的作用域,它有3个值,分别是:
request、session、application。
request代表为每个WebServiceSOAP的请求都产生一个服务对象,和Spring的scope很像,在服务请求频繁的话会消耗很多资源。
session是给每个调用当前WebService的客户端创建一个服务对象
application是个当前所有的请求创建一个服务对象
3、写完配置后,就需要用axis提供的AdminClient工具类帮我们发布WebService,直到生成server-config.wsdd,步骤如下:
运行