您的位置:首页 > 编程语言 > PHP开发

如何使用axis为你的项目加入webservice

2009-04-27 23:28 621 查看
笔者近期要为项目加入webservice模块,但是看了网上的教程文章一阵碰壁后才学会如何加入ws,所以写一篇自己增加webservice的文章,为广大网友提供另一个方面的教程,希望对大家有所启迪。

前提:已有一个web项目,名为testAxis ,路径:E:/eclipseWork/testAxis

1、下载axis包

http://www.apache.org/dyn/closer.cgi/ws/axis/1_4

下载 axis-bin-1_4.zip

解压到 E:/axis-1_4

2、配置axis

将 E:/axis-1_4/lib 里面的文件拷到 E:/eclipseWork/testAxis/web/WEB-INF/lib 下

编辑 E:/eclipseWork/testAxis/web/WEB-INF/web.xml



<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

前加入:

<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>


 

编辑tomcat/conf/server.xml



 <Host name="localhost" debug="0" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

后加入:

<Context docBase="E:/eclipseWork/testAxis/web" path="/testAxis" reloadable="true" />

启动tomcat 访问: http://localhost:8080/testAxis/services

可以看到:

And now... Some Services

AdminService (wsdl)
AdminService

Version (wsdl)
getVersion



 3、编写webservice服务端

在web项目下新建一个类

package com.neo.test;

public class HelloWorld {
public String sayHello() {
return "hello";
}
}


4、注册服务

在 E:/eclipseWork/testAxis/web/WEB-INF 下新建文本文件 deploy.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="SayHello" provider="java:RPC">
<parameter name="className" value="com.neo.test.HelloWorld"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>


启动刚刚配置好的项目,并确保访问http://localhost:8080/testAxis/services页面显示正常

打开cmd

cd E:/eclipseWork/testAxis/web/WEB-INF

E:/eclipseWork/testAxis/web/WEB-INF>java -Djava.ext.dirs=E:/eclipseWork/testAxis/web/WEB-INF/lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/testAxis/servlet/AxisServlet deploy.wsdd

 

成功的话会显示:

Processing file deploy.wsdd
<Admin>Done processing</Admin>

并在 E:/eclipseWork/testAxis/web/WEB-INF 下面产生 server-config.wsdd 文件

重启tomcat,并访问 http://localhost:8080/testAxis/services 会发现多出来一个service

And now... Some Services

AdminService (wsdl)
AdminService

Version (wsdl)
getVersion

SayHello (wsdl)
sayHello

就说明你的配置成功了

 

5、测试webservice

访问 http://localhost:8082/testAxis/services/SayHello?wsdl

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost:8082/testAxis/services/SayHello" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8082/testAxis/services/SayHello" xmlns:intf="http://localhost:8082/testAxis/services/SayHello" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 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 Apr 22, 2006 (06:55:48 PDT)-->

<wsdl:message name="sayHelloRequest">

</wsdl:message>

<wsdl:message name="sayHelloResponse">

<wsdl:part name="sayHelloReturn" type="xsd:string"/>

</wsdl:message>

<wsdl:portType name="HelloWorld">

<wsdl:operation name="sayHello">

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

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

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name="SayHelloSoapBinding" type="impl:HelloWorld">

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

<wsdl:operation name="sayHello">

<wsdlsoap:operation soapAction=""/>

<wsdl:input name="sayHelloRequest">

<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://test.neo.com" use="encoded"/>

</wsdl:input>

<wsdl:output name="sayHelloResponse">

<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8082/testAxis/services/SayHello" use="encoded"/>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="HelloWorldService">

<wsdl:port binding="impl:SayHelloSoapBinding" name="SayHello">

<wsdlsoap:address location="http://localhost:8082/testAxis/services/SayHello"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>


打开cmd

 

cd E:/eclipseWork/testAxis

 

E:/eclipseWork/testAxis>java -Djava.ext.dirs=E:/eclipseWork/testAxis/web/WEB-INF
/lib org.apache.axis.wsdl.WSDL2Java -oE:/eclipseWork/testAxis/src -pcom.neo.clie
nt http://localhost:8082/testAxis/services/SayHello?wsdl

 

执行后在src下产生 E:/eclipseWork/testAxis/src/com/neo/client 文件夹里面有四个java文件:

HelloWorld.java

HelloWorldService.java

HelloWorldServiceLocator.java

SayHelloSoapBindingStub.java

 

这是根据服务器端提供的wsdl生成的客户端需要的基础文件

 

在com.neo.client下新建一个类

package com.neo.client;

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;

public class HelloWorldClient {
public void testSayHello() throws ServiceException, RemoteException{
HelloWorldService service = new HelloWorldServiceLocator();
HelloWorld client  = service.getSayHello();
System.out.println(client.sayHello());
}

public static void main(String[] args) {
HelloWorldClient client = new HelloWorldClient();
try {
client.testSayHello();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
}
}


直接运行,如果打印出 hello 就说明客户端调用成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息