java呼叫WebService可以直接使用Apache提供的axis.jar自己編寫程式碼,或者利用Eclipse自動生成WebService Client程式碼,利用其中的Proxy類進行呼叫。理論上是一樣的,只不過用Eclipse自動生成程式碼省事些。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 { //標識Web Service的具體路徑 String endpoint = "WebService服務地址"; // 建立 Service例項 Service service = new Service(); // 透過Service例項建立Call的例項 Call call = (Call) service.createCall(); //將Web Service的服務路徑加入到call例項之中. call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設定服務的位置 // 由於需要認證,故需要設定呼叫的SOAP頭資訊。 Name headerName = new PrefixedQName( new QName("釋出的wsdl裡的targetNamespace裡的url", "string_itemName") ); org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName); header.addTextNode( "blablabla" ); call.addHeader(header); // SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("釋出的wsdl裡的targetNamespace裡的url", "SoapHeader"); // soapHeaderElement.setNamespaceURI("釋出的wsdl裡的targetNamespace裡的url"); // try // { // soapHeaderElement.addChildElement("string_itemName").setValue("blablabla"); // } // catch (SOAPException e) // { // e.printStackTrace(); // } // call.addHeader(soapHeaderElement); //呼叫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
java呼叫WebService可以直接使用Apache提供的axis.jar自己編寫程式碼,或者利用Eclipse自動生成WebService Client程式碼,利用其中的Proxy類進行呼叫。理論上是一樣的,只不過用Eclipse自動生成程式碼省事些。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 { //標識Web Service的具體路徑 String endpoint = "WebService服務地址"; // 建立 Service例項 Service service = new Service(); // 透過Service例項建立Call的例項 Call call = (Call) service.createCall(); //將Web Service的服務路徑加入到call例項之中. call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設定服務的位置 // 由於需要認證,故需要設定呼叫的SOAP頭資訊。 Name headerName = new PrefixedQName( new QName("釋出的wsdl裡的targetNamespace裡的url", "string_itemName") ); org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName); header.addTextNode( "blablabla" ); call.addHeader(header); // SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("釋出的wsdl裡的targetNamespace裡的url", "SoapHeader"); // soapHeaderElement.setNamespaceURI("釋出的wsdl裡的targetNamespace裡的url"); // try // { // soapHeaderElement.addChildElement("string_itemName").setValue("blablabla"); // } // catch (SOAPException e) // { // e.printStackTrace(); // } // call.addHeader(soapHeaderElement); //呼叫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("釋出的wsdl裡的targetNamespace裡的url", "Exception"), "Exception", new javax.xml.namespace.QName("釋出的wsdl裡的targetNamespace裡的url", "Exception"), true )); call.setOperation( oper ); call.setOperationName(new javax.xml.namespace.QName("釋出的wsdl裡的targetNamespace裡的url", "opName")); //呼叫Web Service,傳入引數 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自動生成WebService client程式碼就容易多了:(由於還不會發圖片,就用語言描述了,大家酬和看吧。。。)首先,new project,選擇other,在輸入框中輸入Web Service Client,選中搜索後的結果,點選Next,在Service definition中輸入 WebService的釋出地址,點選Finish這樣,WebService Client程式碼已經生成好了。接下來寫一個Test類,在main函式中輸入如下程式碼:String endpoint = "伺服器的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();}