今天学习了一下webservice的东西,在网上看了些简单的例子,自己有实现了一下,例子都很简单,只是需要哪些JAR倒是挺烦的,因为网上的例子只提到AXIS,其他需要的都是debug出来的。特意列出来,不甚懂为什么需要,只是没有就不能成功。高手看了,还望指点一二。
项目的名字是:webserviceDemo
必需的JAR:
axis.jar
commons-logging.jar
saaj.jar
jaxrpc.jar
commons-discover-0.2.jar
wsdl4j-1.5.1.jar
配置文件:
主要是web.xml 和 *.wsdd 文件的配置,都放在web-inf下
(1)web.xml
没什么需要特别说明的,就和配置普通的servlet一样
- <?xml?version="1.0"?encoding="UTF-8"?>?
-
<web-app?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns="http://java.sun.com/xml/ns/javaee"?xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"?xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"?id="WebApp_ID"?version="2.5">?
-
??<display-name>TrendMicro?SilkCentral?Test?Manager?Report?System</display-name>?
- ?? ?
-
??<session-config>?
-
????<session-timeout>30</session-timeout>?
-
??</session-config>?
- ?? ?
- ?? ?
-
??<welcome-file-list>?
-
????<welcome-file>index.html</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>/services/*</url-pattern>?
-
????</servlet-mapping>?
- ?
- ?
-
</web-app>?
(2)server-config.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">?? ?
- ?
-
<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>?
- ?
-
??<handler?type="java:org.apache.axis.handlers.http.URLMapper"?name="URLMapper"/>??? ?
-
??<service?name="Test"?provider="java:RPC">??? ?
-
?????<parameter?name="className"?value="test.Test"/>?
-
?????<parameter?name="scope"?value="request"/>?
-
?????<parameter?name="allowedMethods"?value="*"/>?? ?
-
?????<messageReceiver?class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>?
-
??</service>??? ?
-
??<transport?name="http">??? ?
-
?????<requestFlow>??? ?
-
????????<handler?type="URLMapper"/>??? ?
-
?????</requestFlow>??? ?
-
??</transport>??? ?
-
</deployment>?
编写方法
?
- package?test; ?
- ?
- ?
-
public?class?Test?{ ?
- ?
-
????public?String?Test1(String?name){ ?
-
????????return?name; ?
- ????} ?
- ?
- } ?
?
测试
访问http://localhost:8080/webserviceDemo/services?,测试是否成功,注意地址最后不用加/,加上就访问不到了(不明白未什么)
?
调用
webservice上的方法参数可以任意传,但是返回值我只会返回基本类型,如果要返回对象、数组的,我还不知道怎么弄。下面的例子是简单的调用。
?
- package?test; ?
- ?
- import?java.util.List; ?
- ?
- import?org.apache.axis.client.Call; ?
- import?org.apache.axis.client.Service; ?
- ?
- public?class?TestCall?{ ?
- ???? ?
- ????public?static?void?main(String[]?args)?{ ?
- ????????//?TODO?Auto-generated?method?stub ?
-
????????String?url?=?"http://localhost:8080/webserviceDemo/services/Test"; ?
-
????????Service?service?=?new?Service(); ?
- ????????Call?call; ?
- ????????try?{ ?
-
????????????call?=?(Call)?service.createCall(); ?
- ????????????call.setTargetEndpointAddress(new?java.net.URL(url)); ?
- ????????????call.setOperationName("Test1"); ?
- ????????????call.setReturnClass(List.class); ?
- ???????????? ?
-
????????????int?ret?=?(Integer)?call.invoke(new?Object[]{"nameameddfasdfsdf"}); ?
- ????????????System.out.println("--------"+ret); ?
- ????????}?catch?(Exception?e)?{ ?
- ????????????//?TODO?Auto-generated?catch?block ?
- ????????????e.printStackTrace(); ?
- ????????} ?
- ????} ?
- ?
- } ?
?
?好,就到这些,实现这个例子,遇到的纠结问题就是那几个jar的问题。然后就是调用时,怎么设置传递参数的问题。传递参数有很多方法要设置,比如call.addParameter(),call.setReturnType,qn等等,网上看的,不是很明白,记下来,留个提示。
顺道说一句,例子如有雷同,那肯定是………………我copy别人的,嘿嘿。(心里默默感谢那些勤奋写博客的各位)