做webservice,我一開始用的是xfire,雖然做起來非常簡單,但是它用到的包實現是太多了,什麼包都需要,有的時候還經常訪問不到,例如http://localhost:8080/xfire/services/這樣就訪問不到,而 http://localhost:8080/xfire/services/DataSource?wsdl這樣又能看到wsdl語言,用程式調用也是出錯,資訊就是找不到這個webservice. 無奈,又找了axis,axis提供的非常方便,只需要在web-inf/server-config.wsdd中配置就可以了.調用webservice的時候也不會出現找不到服務的錯誤.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="adminPassword" value="admin"/> parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/> parameter name="sendXsiTypes" value="true"/> parameter name="sendMultiRefs" value="true"/> parameter name="sendXMLDeclaration" value="true"/> parameter name="axis.sendMinimizedElements" 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="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/> service name="Version" provider="java:RPC"> parameter name="allowedMethods" value="getVersion"/> parameter name="className" value="org.apache.axis.Version"/> service> service name="GetControls" provider="java:RPC" style="wrapped" use="literal"> parameter name="className" value="Data.DataSource.DataSourceImpl"/> parameter name="alowedMethods" value="*"/> service> transport name="local"> responseFlow> handler type="LocalResponder"/> responseFlow> transport> transport name="http"> requestFlow> handler type="URLMapper"/> handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> requestFlow> transport>deployment>
這樣的代碼描述非常清晰,version與GetControls就是我自己寫的兩個webservice;className就是webservice的類,這個類只要是一個public java類就可以.alowedMethods如果value是*的話表示類裡面所有的public方法都會成為webservice的方法.調用webservice的方式也很簡單,代碼如下:
String xml = ""a" name="y"/>";String host = " http://localhost:8080"; String servicepath = "/WebSite/services"; String endpoint = host + servicepath; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint)); call.setOperationName(new QName("GetControls", "GetControlsInfoToDataRow")); call.setReturnType(XMLType.XSD_BOOLEAN); call.addParameter("strnode", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Boolean ret1 = (Boolean) call.invoke(new Object[] ...{ xml }); System.out.print(ret1.booleanValue());
需要引用的類如下
import org.apache.axis.client.Call;import org.apache.axis.client.Service;
好了,這樣就可以調用了