一、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 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
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.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
public class SayHello {
public String getName(String name)
{
return "hello "+name;
}
}
2.編寫LogHandler.java
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文件
<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
命令參數爲:
-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 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-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>