webservice客戶端asmx
阿新 • • 發佈:2020-12-24
技術標籤:JAVAwebserviceasmx
記錄一次webservice介面訪問服務端一般會給個以http://xxx/services.asmx。
以前都是wsdl做服務端,採用idea自帶的工具生成客戶端或者用wsdl2java工具生成。
從網上找了好多方法,最後終於成功了。
服務端的URL:
asmx的請求與響應程式碼:
<!--請求--> POST /webService/services/webServiceImplService.asmx HTTP/1.1 Host: 172.16.1.20 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://webService/services/webServiceImplService/SendInfo" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <SendInfo xmlns="http://webService/services/webServiceImplService"> <Data>string</Data> </SendInfo> </soap:Body> </soap:Envelope>
<!--響應--> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <SendInfoResponse xmlns="http://webService/services/webServiceImplService"> <SendInfoResult>string</SendInfoResult> </SendInfoResponse> </soap:Body> </soap:Envelope>
方法一
asmx也可以用wsdl2java工具生成。就在http://xxx/services.asmx後加?wsdl即可。生成方式可百度,有很多。如果這麼簡單我就不會寫這篇文章了/哭
我這個服務端地址裡面包含了很多方法。其中有引數是重複的,導致用wsdl2java工具生成時一直報某某欄位重複。我從網上找了個asmx檔案是可以用wsdl2java生成的。所以這個方法是沒法用的。
方法二
直接使用org.apache.axis.client.Service和Call。程式碼如下:
public static void main(String[] args) throws Exception { String url = "http://ip:port/webService/services/webServiceImplService.asmx"; //這裡有個坑,一定要注意最後是否有反斜線!!! String namespace = "http://webService/services/webServiceImplService"; //action路徑(方法名) String actionUri = "SendInfo"; //方法名 String op = "SendInfo"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(url)); call.setUseSOAPAction(true); // 在建立QName物件時,QName類的構造方法的第一個引數表示WSDL檔案的名稱空間名,也就是<wsdl:definitions>元素的targetNamespace屬性值 call.setSOAPActionURI(namespace +"/"+actionUri); call.setReturnType(XMLType.XSD_STRING); call.setOperationName(new QName(namespace, op)); // 設定要呼叫哪個方法 call.addParameter(new QName(namespace,"Data"), // 設定要傳遞的引數(形參) XMLType.XSD_STRING, ParameterMode.IN); String json = "傳遞的資料"; Object[] params = new Object[]{json}; String response = ""; try { response = (String) call.invoke(params);// 呼叫方法並傳遞引數 }catch (Exception e){ e.printStackTrace(); //輸出SOAP傳送的請求報文 System.out.println("--SOAP Request: " + call.getMessageContext().getRequestMessage().getSOAPPartAsString()); } }