java調(diào)用WebService可以直接使用Apache提供的axis.jar自己編寫代碼,或者利用Eclipse自動(dòng)生成WebService Client代碼,利用其中的Proxy類進(jìn)行調(diào)用。理論上是一樣的,只不過用Eclipse自動(dòng)生成代碼省事些。1、編寫代碼方式:package com.yudun.test;import java.rmi.RemoteException;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.message.PrefixedQName;import org.apache.axis.message.SOAPHeaderElement;import com.cezanne.golden.user.Exception;import com.cezanne.golden.user.UserManagerServiceProxy;import javax.xml.namespace.QName;import java.net.MalformedURLException;import javax.xml.rpc.ServiceException;import javax.xml.soap.Name;import javax.xml.soap.SOAPException;public class testWebService {public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException { //標(biāo)識Web Service的具體路徑 String endpoint = "WebService服務(wù)地址"; // 創(chuàng)建 Service實(shí)例 Service service = new Service(); // 通過Service實(shí)例創(chuàng)建Call的實(shí)例 Call call = (Call) service.createCall(); //將Web Service的服務(wù)路徑加入到call實(shí)例之中. call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設(shè)置服務(wù)的位置 // 由于需要認(rèn)證,故需要設(shè)置調(diào)用的SOAP頭信息。 Name headerName = new PrefixedQName( new QName("發(fā)布的wsdl里的targetNamespace里的url", "string_itemName") ); org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName); header.addTextNode( "blablabla" ); call.addHeader(header); // SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("發(fā)布的wsdl里的targetNamespace里的url", "SoapHeader"); // soapHeaderElement.setNamespaceURI("發(fā)布的wsdl里的targetNamespace里的url"); // try // { // soapHeaderElement.addChildElement("string_itemName").setValue("blablabla"); // } // catch (SOAPException e) // { // e.printStackTrace(); // } // call.addHeader(soapHeaderElement); //調(diào)用Web Service的方法 org.apache.axis.description.OperationDesc oper; org.apache.axis.description.ParameterDesc param; oper = new org.apache.axis.description.OperationDesc(); oper.setName("opName"); param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("
http://www.w3.org/2001/XMLSchema
", "string"), java.lang.String.class, false, false); param.setOmittable(true); oper.addParameter(param); param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema
", "string"), java.lang.String.class, false, false); param.setOmittable(true); oper.addParameter(param); param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema
", "string"), java.lang.String.class, false, false); param.setOmittable(true); oper.addParameter(param); oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema
", "string")); oper.setReturnClass(java.lang.String.class); oper.setReturnQName(new javax.xml.namespace.QName("", "return")); oper.setStyle(org.apache.axis.constants.Style.WRAPPED); oper.setUse(org.apache.axis.constants.Use.LITERAL); oper.addFault(new org.apache.axis.description.FaultDesc( new javax.xml.namespace.QName("發(fā)布的wsdl里的targetNamespace里的url", "Exception"), "Exception", new javax.xml.namespace.QName("發(fā)布的wsdl里的targetNamespace里的url", "Exception"), true )); call.setOperation( oper ); call.setOperationName(new javax.xml.namespace.QName("發(fā)布的wsdl里的targetNamespace里的url", "opName")); //調(diào)用Web Service,傳入?yún)?shù) String res = ( String ) call.invoke( new Object[]("arg0","arg1")); System.out.println("==============="); return res; }/** * @param args */ public static void main(String[] args) { try { System.out.println(getResult()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } catch (SOAPException e) { e.printStackTrace(); } }}2、利用Eclipse自動(dòng)生成WebService client代碼就容易多了:(由于還不會(huì)發(fā)圖片,就用語言描述了,大家酬和看吧。。。)首先,new project,選擇other,在輸入框中輸入Web Service Client,選中搜索后的結(jié)果,點(diǎn)擊Next,在Service definition中輸入 WebService的發(fā)布地址,點(diǎn)擊Finish這樣,WebService Client代碼已經(jīng)生成好了。接下來寫一個(gè)Test類,在main函數(shù)中輸入如下代碼:String endpoint = "服務(wù)器的WebService的地址"; YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint); try { String resultStr = umsp.opMethod("arg0","arg1"); System.out.println(resultStr); } catch (Exception e) { System.out.println("異常"); e.printStackTrace();} catch (RemoteException e) { System.out.println("RemoteException異常"); e.printStackTrace();}