本文借鑒了網(wǎng)上的兩篇文章:
AXIS學(xué)習(xí)筆記
使用Handler來增強Web服務(wù)的功能
我們使用的axis版本是apache axis-bin-1_3,可以到apache網(wǎng)站下載,。
1.環(huán)境變量設(shè)置
AXIS_HOME
即axis-bin-1_2.zip解壓的目錄(我的是在 F:\opensource\axis-1_2)
即 %AXIS_HOME%\lib
2.導(dǎo)入jar包
將axisa解壓縮后,,復(fù)制lib目錄下列jar包到應(yīng)用目錄的lib目錄:
saaj.jar
wsdl4j-1.5.1.jar
jaxrpc.jar
commons-logging-1.0.4.jar
commons-discovery-0.2.jar
axis-schema.jar
axis-ant.jar
axis.jar
3.修改web.Xml
將axis需要的servlet復(fù)制到應(yīng)用的web.xml文件里面,注意順序,。
重新啟動服務(wù),,可以訪問“/servlet/AxisServlet”試一下,
比如:http://10.162.11.70:9080/newsdaoa/servlet/AxisServlet
<servlet id="Servlet_12">
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet id="Servlet_13">
<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 id="Servlet_14">
<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 id="ServletMapping_12">
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping id="ServletMapping_13">
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping id="ServletMapping_14">
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping id="ServletMapping_15">
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
4.添加服務(wù)
將server-config.wsdd文件復(fù)制到發(fā)布應(yīng)用的WEB-INF目錄下,這就是AXIS的配置文件,,以后所有的服務(wù)發(fā)布描述都會在里面找到,。
如果還沒有server-config.wsdd文件,可以先寫一個發(fā)布描述文件,,然后用axis來生成,,以后需要發(fā)布新的服務(wù),直接往里面添加即可,。
比如有一個HelloWorld.class類,,里面有sayHello(String msg)方法,想把它發(fā)布webservices,先寫發(fā)布文件deploy.wsdd文件,,即SOAP服務(wù)發(fā)布描述文件deploy.wsdd
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
如果想發(fā)布新的服務(wù),,直接往server-config.wsdd里面添加service描述,,比如想把知識管理模塊導(dǎo)入知識功能發(fā)布成webservices,,對應(yīng)的程序文件是com.lc.v3.ecp.km.inteface.KmDelegate.java,需要發(fā)布的方法是importKm(String kmXmlStr),,將此文件編譯成class后,,放到發(fā)布系統(tǒng)的相應(yīng)目錄下,,往server-config.wsdd添加下列描述:
<service name="ImportKm" provider="java:RPC">
<parameter name="className" value="com.lc.v3.ecp.km.inteface.KmDelegate"/>
<parameter name="allowedMethods" value="importKm"/>
</service>
重新啟動服務(wù),,一個新的webservices就發(fā)布成功了,,如果系統(tǒng)發(fā)布地址是http://10.162.11.70:9080/newsdaoa,
調(diào)用的url是:http://10.162.11.70:9080/newsdaoa/services/ImportKm
5.給服務(wù)添加Handler
J2EE Web 服務(wù)中的Handler技術(shù)特點非常像Servlet技術(shù)中的Filter,。我們知道,,在Servlet中,當(dāng)一個HTTP到達(dá)服務(wù)端時,,往往要經(jīng)過多個Filter對請求進(jìn)行過濾,,然后才到達(dá)提供服務(wù)的Servlet,這些Filter的功能往往是對請求進(jìn)行統(tǒng)一編碼,,對用戶進(jìn)行認(rèn)證,,把用戶的訪問寫入系統(tǒng)日志等。相應(yīng)的,,Web服務(wù)中的Handler通常也提供一下的功能:
SOAP消息Handler能夠訪問代表RPC請求或者響應(yīng)的SOAP消息,。在JAX-RPC技術(shù)中,SOAP消息Handler可以部署在服務(wù)端,,也可以在客戶端使用,。
至于如何開發(fā)handler,可以到網(wǎng)上去搜索陳亞強寫的《使用Handler來增強Web服務(wù)的功能》,,人家寫的比較好,,我就不在這廢話了。
比如服務(wù)必須有用戶名和密碼才能訪問,,可以添加axis自帶的檢驗認(rèn)證handler,,用戶名和密碼存放在\WEB-INF下的users.lst文件中。handler分別是:
//訪問者必須提供用戶名和密碼,,只要用戶名和密碼正確即可
org.apache.axis.handlers.SimpleAuthenticationHandler
//訪問者必須提供指定的用戶名和密碼,,用戶名和密碼正確即可
//在services中用allowedRoles屬性指定訪問的用戶名
org.apache.axis.handlers.SimpleAuthorizationHandler
如果想給上面的ImportKm服務(wù)添加用戶校驗,,并且只允許用戶是pubnet,密碼是123456的用戶訪問,,首先往users.lst添加用戶名和密碼,,格式是:
pubnet 123456
user1 pass1
user2
user3 pass3
改變上述server-config.wsdd里面service的描述:
<service name="ImportKm" provider="java:RPC">
//添加handler,直接指定java類
<requestFlow name="checks">
<handler type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<handler type="java:org.apache.axis.handlers.SimpleAuthorizationHandler"/>
</requestFlow>
<parameter name="allowedRoles" value="pubnet"/>
<parameter name="className" value="com.lc.v3.ecp.km.inteface.KmDelegate"/>
<parameter name="allowedMethods" value="importKm"/>
</service>
除了上面方式外,,還可以先單獨聲明handler,,然后再添加到service里,比如自己開發(fā)了一個日志handler,,用來記錄每次對webservice的訪問,,程序是com.lc.v3.ecp.pub.webservies. AxisLogHandler,添加方式改變?yōu)椋?
//先單獨定義日志handler
<handler name="logging" type="java:com.lc.v3.ecp.pub.webservies.AxisLogHandler">
//日志記錄文件
<parameter name="filename" value="c:/log/EcpService.log"/>
</handler>
//再往service添加
<service name="ImportKm" provider="java:RPC">
<requestFlow name="checks">
//引用log定義
<handler type="logging"/>
<handler type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<handler type="java:org.apache.axis.handlers.SimpleAuthorizationHandler"/>
</requestFlow>
<parameter name="allowedRoles" value="pubnet"/>
<parameter name="className" value="com.lc.v3.ecp.km.inteface.KmDelegate"/>
<parameter name="allowedMethods" value="importKm"/>
<parameter name="allowedMethods" value="sayHello"/>
</service> |
|