加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webService

发布时间:2020-12-17 01:02:52 所属栏目:安全 来源:网络整理
导读:? Web Service学习之axis 看着网上的资料学习了一下,做点笔记以防以后忘记。 一、准备工作: ??? 到axis官方网站下载相应的jar包,我下的是1.4final版。 ??? http://ws.apache.org/axis/ 二、建立项目: ??? 直接在MyEclipse中建立了一个web项目。将相应的j

?

Web Service学习之axis

看着网上的资料学习了一下,做点笔记以防以后忘记。

一、准备工作:

??? 到axis官方网站下载相应的jar包,我下的是1.4final版。

??? http://ws.apache.org/axis/

二、建立项目:

??? 直接在MyEclipse中建立了一个web项目。将相应的jar包拷贝到lib文件夹下

三、创建一个WebService服务

??? 直接创建一个类HelloClient.java

Java代码 ?????????????????????????????

  1. package?com;???? ??
  2. ??
  3. public?class?HelloServer?{???? ??
  4. ????public?String?sayHello(String?name)?{???? ??
  5. ????????return?"Hello?"?+?name;???? ??
  6. ????}???? ??
  7. }??

package com;

?

public class HelloServer {

? public String sayHello(String name) {

?? return "Hello " + name;

? }

}

?

??? axis支持两种方式创建,一种是将编写好的java文件改为*.jws文件。个人觉得这样不好,所以就用另外一种,采用在server-config.xml文件中配置的方式。注意:该文件位置为WEB-INF目录下

Xml代码

<?xml?version="1.0"?encoding="UTF-8"?>??

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

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

????<globalConfiguration>??

????????<parameter?name="adminPassword"?value="admin"?/>??

????????<parameter?name="enableNamespacePrefixOptimization"??

????????????value="false"?/>??

????????<parameter?name="dotNetSoapEncFix"?value="true"?/>??

????????<parameter?name="disablePrettyXML"?value="true"?/>??

????????<parameter?name="sendMultiRefs"?value="true"?/>??

????????<parameter?name="sendXsiTypes"?value="true"?/>??

????????<parameter?name="attachments.implementation"??

????????????value="org.apache.axis.attachments.AttachmentsImpl"?/>??

????????<parameter?name="sendXMLDeclaration"?value="true"?/>??

??

????????<requestFlow>??

????????????<handler?type="java:org.apache.axis.handlers.JWSHandler">??

????????????????<parameter?name="scope"?value="session"?/>??

????????????</handler>??

????????????<handler?type="java:org.apache.axis.handlers.JWSHandler">??

????????????????<parameter?name="scope"?value="request"?/>??

????????????????<parameter?name="extension"?value=".jwr"?/>??

????????????</handler>??

????????</requestFlow>??

????</globalConfiguration>??

??

????<handler?name="LocalResponder"??

????????type="java:org.apache.axis.transport.local.LocalResponder"?/>??

????<handler?name="URLMapper"??

????????type="java:org.apache.axis.handlers.http.URLMapper"?/>??

????<handler?name="Authenticate"??

????????type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"?/>??

??

????<service?name="AdminService"?provider="java:MSG">??

????????<parameter?name="allowedMethods"?value="AdminService"?/>??

????????<parameter?name="enableRemoteAdmin"?value="false"?/>??

????????<parameter?name="className"?value="org.apache.axis.utils.Admin"?/>??

????????<namespace>http://xml.apache.org/axis/wsdd/</namespace>??

????</service>??

??

????<service?name="Version"?provider="java:RPC">??

????????<parameter?name="allowedMethods"?value="getVersion"?/>??

????????<parameter?name="className"?value="org.apache.axis.Version"?/>??

????</service>??

????<SPAN?style="COLOR:?#ff0000"><service?name="HelloServer"?provider="java:RPC">??

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

????????<parameter?name="className"?value="com.HelloServer"?/>??

????</service></SPAN>??

??

????<transport?name="http">??

????????<requestFlow>??

????????????<handler?type="URLMapper"?/>??

????????????<handler??

????????????????type="java:org.apache.axis.handlers.http.HTTPAuthHandler"?/>??

????????</requestFlow>??

????????<parameter?name="qs:list"??

????????????value="org.apache.axis.transport.http.QSListHandler"?/>??

????????<parameter?name="qs:wsdl"??

????????????value="org.apache.axis.transport.http.QSWSDLHandler"?/>??

????????<parameter?name="qs:method"??

????????????value="org.apache.axis.transport.http.QSMethodHandler"?/>??

????</transport>??

??

????<transport?name="local">??

????????<responseFlow>??

????????????<handler?type="LocalResponder"?/>??

????????</responseFlow>??

????</transport>??

</deployment>??

<?xmlversion="1.0" encoding="UTF-8"?>

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

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

? <globalConfiguration>

??? <parameter name="adminPassword"value="admin" />

??? <parameter name="enableNamespacePrefixOptimization"

????? value="false" />

??? <parameter name="dotNetSoapEncFix"value="true" />

??? <parameter name="disablePrettyXML"value="true" />

??? <parameter name="sendMultiRefs"value="true" />

??? <parameter name="sendXsiTypes"value="true" />

??? <parameter name="attachments.implementation"

????? value="org.apache.axis.attachments.AttachmentsImpl"/>

??? <parameter name="sendXMLDeclaration"value="true" />

?

??? <requestFlow>

????? <handlertype="java:org.apache.axis.handlers.JWSHandler">

??????? <parameter name="scope"value="session" />

????? </handler>

????? <handler type="java:org.apache.axis.handlers.JWSHandler">

??????? <parameter name="scope"value="request" />

??????? <parameter name="extension"value=".jwr" />

????? </handler>

??? </requestFlow>

? </globalConfiguration>

?

? <handler name="LocalResponder"

??? type="java:org.apache.axis.transport.local.LocalResponder"/>

? <handler name="URLMapper"

??? type="java:org.apache.axis.handlers.http.URLMapper"/>

? <handler name="Authenticate"

??? type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>

?

? <service name="AdminService" provider="java:MSG">

??? <parameter name="allowedMethods"value="AdminService" />

??? <parameter name="enableRemoteAdmin"value="false" />

??? <parameter name="className"value="org.apache.axis.utils.Admin" />

??? <namespace>http://xml.apache.org/axis/wsdd/</namespace>

? </service>

?

? <service name="Version"provider="java:RPC">

??? <parameter name="allowedMethods"value="getVersion" />

??? <parameter name="className"value="org.apache.axis.Version" />

? </service>

?

? <!--??? ??????????? -->

? <service name="HelloServer"provider="java:RPC">

??? <parametername="allowedMethods" value="*" />

??? <parameter name="className"value="com.HelloServer" />

? </service>

?

? <transport name="http">

??? <requestFlow>

????? <handler type="URLMapper" />

????? <handler

??????? type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

??? </requestFlow>

??? <parameter name="qs:list"

????? value="org.apache.axis.transport.http.QSListHandler"/>

??? <parameter name="qs:wsdl"

????? value="org.apache.axis.transport.http.QSWSDLHandler"/>

??? <parameter name="qs:method"

????? value="org.apache.axis.transport.http.QSMethodHandler"/>

? </transport>

?

? <transport name="local">

??? <responseFlow>

????? <handler type="LocalResponder" />

??? </responseFlow>

? </transport>

</deployment>

?? web.xml文件中的配置如下

Xml代码

<?xml?version="1.0"?encoding="UTF-8"?>??

<web-app?version="2.5"?xmlns="http://java.sun.com/xml/ns/javaee"??

????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??

????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee???

????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">??

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

????<welcome-file-list>??

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

????</welcome-file-list>??

</web-app>??

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appversion="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

? http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

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

? <welcome-file-list>

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

? </welcome-file-list>

</web-app>

四、部署启动tomcat:

在浏览器地址栏输入

http://localhost:8080/axisWebServiceServer/services

可以看到已有的WebService

http://localhost:8080/axisWebServiceServer/services/HelloServer?wsdl

可以看到自己写的WebService

五、测试调用WebService

Java代码

  1. package?com;???? ??
  2. ??
  3. import?java.net.MalformedURLException;???? ??
  4. import?java.rmi.RemoteException;???? ??
  5. ??
  6. import?javax.xml.rpc.ServiceException;???? ??
  7. ??
  8. import?org.apache.axis.client.Call;???? ??
  9. import?org.apache.axis.client.Service;???? ??
  10. ??
  11. public?class?HelloClient?{???? ??
  12. ??
  13. ????public?static?void?main(String[]?args)?{???? ??
  14. ????????String?status?=?"aaaaaaa";???? ??
  15. ????????String?endPoint?=?"http://localhost:8080/axisWebServiceServer/services/HelloServer";???? ??
  16. ????????String?operation?=?"sayHello";???? ??
  17. ????????Service?service?=?new?Service();???? ??
  18. ??
  19. ????????try?{???? ??
  20. ????????????Call?call?=?(Call)?service.createCall();???? ??
  21. ????????????call.setTargetEndpointAddress(new?java.net.URL(endPoint));???? ??
  22. ????????????call.setOperationName(operation);???? ??
  23. ????????????String?xml?=?(String)?call.invoke(new?Object[]?{?status?});????? ??
  24. ????????????System.out.println(xml);???? ??
  25. ????????}?catch?(ServiceException?e)?{???? ??
  26. ????????????e.printStackTrace();???? ??
  27. ????????}?catch?(MalformedURLException?e)?{???? ??
  28. ????????????e.printStackTrace();???? ??
  29. ????????}?catch?(RemoteException?e)?{???? ??
  30. ????????????e.printStackTrace();???? ??
  31. ????????}???? ??
  32. ??
  33. ????}???? ??
  34. ??
  35. }??package com;

?

importjava.net.MalformedURLException;

importjava.rmi.RemoteException;

?

importjavax.xml.rpc.ServiceException;

?

importorg.apache.axis.client.Call;

importorg.apache.axis.client.Service;

?

public class HelloClient {

?

? public static void main(String[] args) {

?? String status = "aaaaaaa";

?? String endPoint ="http://localhost:8080/axisWebServiceServer/services/HelloServer";

?? String operation = "sayHello";

?? Service service = new Service();

?

?? try {

???? Call call = (Call) service.createCall();

???? call.setTargetEndpointAddress(new java.net.URL(endPoint));

???? call.setOperationName(operation);

???? String xml = (String) call.invoke(new Object[] { status });

???? System.out.println(xml);

?? } catch (ServiceException e) {

???? e.printStackTrace();

?? } catch (MalformedURLException e) {

???? e.printStackTrace();

?? } catch (RemoteException e) {

???? e.printStackTrace();

?? }

?

? }

?

}

?

成功!!

java webservice实例?

一:

首先创建个WEB工程,然后:?http://ws.Apache.org/axis/网站下载Axis安装包.当然还依赖其他包的,我这里在附件里上传了所有应用到得包,方便大家。

axis.jar

commons-discovery-0.2.jar

commons-logging-1.0.4.jar

jaxrpc.jar

mailapi_1_3_1.jar

saaj.jar

wsdl4j-1.5.1.jar

二:

然后就写wsdd 文件(注:其实这里真的不用,可以跳过第二步)为了生成这个文件:server-config.wsdd

deploy.wsdd:

<deploymentxmlns="http://xml.apache.org/axis/wsdd/"xmlns:java=""target="_blank">http://xml.apache.org/axis/wsdd/providers/java">
? <service name="HelloWorld"provider="java:RPC">
??? <parameter name="className"value="HelloWorld"/>
??? <parameter name="allowedMethods"value="sayHello"/>
? </service>
</deployment>

在DOS下转换目录到%TOMCAT_HOME%webappsaxisWEB-INF,命令:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

三:

可以自己写第二步中的文件,代码如下:

?

Wsdd代码?

<?xml?version="1.0"?encoding="UTF-8"?>??

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

3.???????

<globalConfiguration>??

<parameter?name="sendMultiRefs"?value="true"/>??

<parameter?name="disablePrettyXML"?value="true"/>??

<parameter?name="dotNetSoapEncFix"?value="true"/>??

<parameter?name="enableNamespacePrefixOptimization"?value="false"/>??

<parameter?name="sendXMLDeclaration"?value="true"/>??

<parameter?name="sendXsiTypes"?value="true"/>??

<parameter?name="attachments.implementation"?value="org.apache.axis.attachments.AttachmentsImpl"/>??

</globalConfiguration>??

13.? ??

???<handler?type="java:org.apache.axis.handlers.http.URLMapper"?name="URLMapper"/>?????

15.? ??<service?name="Login.jws"?provider="java:RPC">?????

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

17.? ?????<parameter?name="scope"?value="request"/>??

18.? ?????<parameter?name="allowedMethods"?value="*"/>??

19.? ?????<messageReceiver?class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>??

20.? ??</service>?????

21.? ??<transport?name="http">?????

22.? ?????<requestFlow>?????

23.? ????????<handler?type="URLMapper"/>?????

24.? ?????</requestFlow>?????

25.? ??</transport>?????

26.? </deployment>??

?

放到 WEB-INF 目录下 和web.xml一起,其中,WEB.XML可以直接从你下载的axis项目中拿来到自己工程就好,或者自己添加:

Xml代码?

1.?????<servlet>??

2.?????????????<servlet-name>AxisServlet</servlet-name>??

3.?????????????<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>??

4.?????????</servlet>??

5.?????????<servlet-mapping>??

6.?????????????<servlet-name>AxisServlet</servlet-name>??

7.?????????????<url-pattern>/services/*</url-pattern>??

8.?????????</servlet-mapping>??

?

四:

? 服务端提供的方法:

Java代码?

1.?????package?server;??

3.?????public?class?SayHello?{??

4.?????????public?String?getName(String?name)?{??

5.?????????????return?"hello====>"?+?name;??

6.?????????}??

7.?????}??

?

?

五:

?

??客户端访问服务端接口获得数据的方法:

?

Java代码?

1.?????package?client;??

3.?????import?org.apache.axis.client.Call;??

4.?????import?org.apache.axis.client.Service;??

6.?????public?class?TestClient?{??

8.?????????public?static?void?main(String[]?args)?throws?Exception?{??

10.? ????????//?指出service所在URL???????

12.? ????????String?endpoint?=?"http://127.0.0.1:8082/webservice/services/Login.jws";??

14.? ????????//?创建一个服务(service)调用(call)???????

16.? ????????Service?service?=?new?Service();??

18.? ????????Call?call?=?(Call)?service.createCall();//?通过service创建call对象???????

19.? ??

20.? ????????//?设置service所在URL???????

21.? ??

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

23.? ??

24.? ????????//?方法名(processService)与MyService.java方法名保持一致???????

25.? ??

26.? ????????call.setOperationName("getName");??

27.? ??

28.? ????????//?Object?数组封装了参数,参数为"This?is?Test!",调用processService(String?arg)???????

29.? ??

30.? ????????String?ret?=?(String)?call.invoke(new?Object[]?{?"继中"?});??

31.? ??

32.? ????????System.out.println(ret);??

33.? ??

34.? ????}??

35.? ??

36.? }??

?

?

六:

?

启动tomcat,先访问http://127.0.0.1:8082/webservice/services,看是否有方法显示,有显示,则代表服务端提供的接口可以成功访问了。

?

我的效果是这样:

?

And now... Some Services

·?????????????????Login.jws?(wsdl)

o?????????????????????????getName

七:

?

???然后在本地跑客户端TestClient,就应该有结果啦,大家试试吧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读