您的位置:首页 > 其它

使用Axis开发WebService

2006-09-08 19:21 483 查看
一、Axis安装
1.测试环境
JDK 1.5Servlet Container: Tomcat 5.5
2.下载地址:http://ws.apache.org/axis/

3.解压缩安装包,将$AXIS_UNZIP_PATH/axis-version/webapps下的axis包拷贝到$TOMCAT_HOME/webapps/下,
以下约定$AXIS_HOME为该$TOMCAT_HOME/webapps/axis目录

4.启动tomcat,访问http://localhost:8080/axis 检查安装是否成功

5.设置classpath编写setEnv.bat:


set AXIS_HOME=$AXIS_UNZIP_HOME


set CLASSPATH=.;%AXIS_HOME%/lib/axis.jar;%AXIS_HOME%/lib/axis-ant.jar;%AXIS_HOME%/lib/commons-discovery-0.2.jar;%AXIS_HOME%/lib/commons-logging-1.0.4.jar;%AXIS_HOME%/lib/jaxrpc.jar;%AXIS_HOME%/lib/saaj.jar;%AXIS_HOME%/lib/wsdl4j-1.5.1.jar;%AXIS_HOME%/lib/log4j-1.2.8.jar;E:/thirdparty/activation/activation.jar;E:/thirdparty/activation/mail.jar





二.使用axis支持web service的部署和开发,最主要有两种方式:

(一)。Dynamic Invocation Interface ( DII)
1.编写服务端程序HelloClient




public class HelloClient

{


ublic String getName(String name)




return "hello "+name;




}



2.将源码拷贝到AXIS_HOME下,重命名为 HelloClient.jws
3.访问连接http://localhost:8080/axis/HelloClient.jws?wsdl,页面显示axis自动生成的wsdl
4.编写访问服务的客户端 TestHelloClient.java


import org.apache.axis.client.Call;


import org.apache.axis.client.Service;


import javax.xml.namespace.QName;


import javax.xml.rpc.ServiceException;


import java.net.MalformedURLException;


import java.rmi.RemoteException;






public class SayHelloClient2

{




public static void main(String[] args)

{




try

{


String endpoint = "http://localhost:8080/axis/HelloClient.jws";




Service service = new Service();


Call call = null;




call = (Call) service.createCall();




call.setOperationName(new QName(


"http://localhost:8080/axis/HelloClient.jws", "getName"));


call.setTargetEndpointAddress(new java.net.URL(endpoint));






String ret = (String) call.invoke(new Object[]

{"zhangsan"});


System.out.println("return value is " + ret);




} catch (Exception ex)

{


ex.printStackTrace();


}


}


}



5.运行TestHelloClient测试;

(二)。 Stubs方式
1.编写服务端程序server,SayHello.java,编译server.SayHello.java


package server;




public class SayHello

{


public String getName(String name)






{


return "hello "+name;


}


}



2.编写LogHandler.java


import org.apache.axis.AxisFault;


import org.apache.axis.Handler;


import org.apache.axis.MessageContext;


import org.apache.axis.handlers.BasicHandler;




import java.util.Date;






public class LogHandler extends BasicHandler

{


public void invoke(MessageContext msgContext) throws AxisFault






{




/** *//** Log an access each time we get invoked.


*/




try

{


Handler serviceHandler = msgContext.getService();




Integer numAccesses =


(Integer)serviceHandler.getOption("accesses");


if (numAccesses == null)


numAccesses = new Integer(0);




numAccesses = new Integer(numAccesses.intValue() + 1);




Date date = new Date();


String result = date + ": service " +


msgContext.getTargetService() +


" accessed " + numAccesses + " time.";


serviceHandler.setOption("accesses", numAccesses);




System.out.println(result);




} catch (Exception e)

{


throw AxisFault.makeFault;


}


}


}



3..编写wsdd文件


deploy.wsdd


<deployment xmlns="http://xml.apache.org/axis/wsdd/"


xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">




<handler name="print" type="java:LogHandler"/>


<service name="sayhello" provider="java:RPC">


<requestFlow>


<handler type="print"/>


</requestFlow>


<parameter name="className" value="server.SayHello"/>


<parameter name="allowedMethods" value="*"/>


</service>


</deployment>



4.将编译后的文件拷贝到AXIS_HOME/WEB-INF/classes下,如:D:/tomcat/webapps/axis/WEB-INF/classes

5.发布服务:
java org.apache.axis.client.AdminClient -h localhost -p 8080 -s /axis/servlet/AxisServlet deploy.wsdd

命令参数为:


The following Options are available:




-l<url> sets the AxisServlet URL


-h<hostName sets the AxisServlet host


-p<portNumber> sets the AxisServlet port


-s<servletPath> sets the path to the AxisServlet


-f<fileName> specifies that a simple file protocol should be used


-u<username> sets the username


-w<password> sets the password


-d sets the debug flag (for instance, -ddd would set it to


3)


-t<name> sets the transport chain touse




Commands:




list will list the currently deployed services


quit will send a quit message to SimpleAxisServer


passwd value changes the admin password




Deployment Descriptor files:




<deployment-descriptor-files> deploys or undeploys Axis components and


web services described in these files




If -l or -h -p -s are not set, the AdminClient will invoke

http://localhost:8080/axis/servlet/AxisServlet 6.生成client stub文件
a:方式1
将SayHello.java拷贝到AXIS_HOME/下,重命名为SayHello.jws,执行下面的命令生存client stub
java org.apache.axis.wsdl.WSDL2Java -p client http://localhost:8080/axis/services/SayHello.jws?wsdl
b:方式2
执行如下命令生成SayHello.wsdl
java org.apache.axis.wsdl.Java2WSDL -oSayHello.wsdl -lhttp://localhost:8080/axis/services/SayHello -nsayhello server.SayHello
执行如下命令生成client stub
java org.apache.axis.wsdl.WSDL2Java SayHello.wsdl -p client
生成的stub client文件列表为:
1。SayHello.java
2。SayHelloService.java。
3。SayHelloServiceLocator.java
4。SayHelloSoapBindingStub.java

7.编写客户端程序,编译并执行




public class SayHelloClient

{




public static void main(String[] args)

{




try

{




SayHelloService service = new client.


SayHelloServiceLocator();


client.SayHello_PortType client = service.getSayHello();


String retValue=client.getName("zhangsan");


System.out.println(retValue);








} catch (Exception e)

{


System.err.println("Execution failed. Exception: " + e);


}


}


}



8.开发自己的WEB应用程序的web service ,需要在描述文件WEB-INF/web.xml文件中添加:


<listener>


<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>


</listener>




<servlet>


<servlet-name>AxisServlet</servlet-name>


<display-name>Apache-Axis Servlet</display-name>


<servlet-class>


org.apache.axis.transport.http.AxisServlet


</servlet-class>


</servlet>




<servlet>


<servlet-name>AdminServlet</servlet-name>


<display-name>Axis Admin Servlet</display-name>


<servlet-class>


org.apache.axis.transport.http.AdminServlet


</servlet-class>


<load-on-startup>100</load-on-startup>


</servlet>




<servlet>


<servlet-name>SOAPMonitorService</servlet-name>


<display-name>SOAPMonitorService</display-name>


<servlet-class>


org.apache.axis.monitor.SOAPMonitorService


</servlet-class>


<init-param>


<param-name>SOAPMonitorPort</param-name>


<param-value>5001</param-value>


</init-param>


<load-on-startup>100</load-on-startup>


</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>




<servlet-mapping>


<servlet-name>SOAPMonitorService</servlet-name>


<url-pattern>/SOAPMonitor</url-pattern>


</servlet-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: