php調用java寫的WebService不能傳參問題解決

來源:互聯網
上載者:User

標籤:php   java   webservice   介面   命名空間   不能傳參   

前言:    

    剛剛做了一個事,php調java的soap介面,但是並沒有什麼文檔,只有看以前寫的java調用用來寫。所以java是可以正常調用的,出現的問題是php能調到介面,但是接收不了參數。

 

    開始沒看懂那個java調用,設定targetNamespace是什麼鬼,翻遍了php手冊,吧英文翻譯過來看了才知道,SoapVar對應了soap資料的封裝。


    網上收了,發現他們都在亂答。浪費我時間,還不如自己看手冊。


    問題出在:命名空間


java soapClient:    

/** * saleOrderInfo 為參數‘{"order":"00122211111","date":"2017-04-14","customer_id":"027"}‘; */public String callWebService(String saleOrderInfo) throws ServiceException,    RemoteException{// webservice路徑          // 這裡後面加不加 "?wsdl" 效果都一樣的          String endpoint = "http://127.0.0.1/service?wsdl";          // 傳送簡訊介面方法名          String operationName = "sendSaleOrder";          String targetNamespace = "http://service.test.bb.service/";          // 定義service對象          org.apache.axis.client.Service service = new org.apache.axis.client.Service();          // 建立一個call對象          Call call = (Call) service.createCall();          // 設定目標地址,即webservice路徑          call.setTargetEndpointAddress(endpoint);                  call.setOperationName(new QName(targetNamespace, operationName));                  call.addParameter(new QName("http://test.bb.service/", "saleOrderInfo"),         XMLType.XSD_STRING, ParameterMode.IN);         call.setReturnClass(String.class);          // 解決錯誤:伺服器未能識別 HTTP 頭 SOAPAction 的值          call.setUseSOAPAction(true);          call.setSOAPActionURI("");        Object obj = call.invoke(new Object[]{saleOrderInfo});        String result = ObjectUtils.toString(obj);        if(StringUtils.isBlank(result)){        result = "{\"message\":\"介面返回結果為空白!\",\"retCode\":\"0\"}";        }   return result;}


開始錯誤的php調用方式 soapClient:

<?php//指定WebService路徑並初始化一個WebService用戶端$ws = "http://127.0.0.1/service?wsdl";//webservice服務的地址$client = new SoapClient ($ws);//參數$params = ‘{"order":"00122211111","date":"2017-04-14","customer_id":"027"}‘;$result=$client->sendSaleOrder([saleOrderInfo => $params]);echo "<pre>";print_r($result);//顯示結果//調用成功,但是參數接收不到


正確的php調用方式 soapClient:

<?php//指定WebService路徑並初始化一個WebService用戶端$ws = "http://127.0.0.1/service?wsdl";//webservice服務的地址$client = new SoapClient ($ws);//參數$params = ‘{"order":"00122211111","date":"2017-04-14","customer_id":"027"}‘;$wrapper = new StdClass;$wrapper->saleOrderInfo = new SoapVar($params, XSD_STRING, "string", "http://test.bb.service/", "saleOrderInfo", "http://test.bb.service/");$searchrequest = new SoapParam($wrapper, "sendSaleOrder");$result=$client->sendSaleOrder($searchrequest);echo "<pre>";print_r($result);//顯示結果//調用成功

 

後言:    

    是的,如你所見。問題就是出在命名空間,service端設定了方法和參數的命名空間,然而方法的命名空間service端設定了預設的地址,所以調用的時候設定了參數的命名空間就能傳參了。


SoapVar是php開放的主要用來封裝用於放入 SOAP 請求中的資料,包括命名方式。

本文出自 “Shows technology” 部落格,請務必保留此出處http://wangzhijun.blog.51cto.com/9660708/1916427

php調用java寫的WebService不能傳參問題解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.