2015-11-05 48 views
1

我正在根據僱用我的公司開發的現有Web應用程序創建移動應用程序,他們希望我儘可能多地使用現有的後端應用程序,結束和中間件。我使用Visual Studio社區與科爾多瓦混合應用程序,並沒有製作本地應用程序的計劃。現在我在調用SOAP Web服務時遇到了嚴重的問題。Web服務麻煩 - Apache Cordova - Visual Studio 2015 Comunity

限制

  • 的Web應用程序部署在JBOSS,並且不使用servlet,而不是 其與Java客戶端

  • 我只可以使用JavaScript調用服務,htlm5和CSS(由於科爾多瓦,但可以實施本地API)

我至今嘗試:

  • 直接通過AJAX調用調用它,我的最後一次嘗試是這樣的:

    VAR productServiceUrl = 「http://localhost/searchUserDataWS/SearchUserDataWS?wsdl」;

    function beginSaveProduct() { 
        var soapMessage = 
        '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://searchuserdataws.alist.integra.la/"> \ 
         <soapenv:Header/> \ 
         <soapenv:Body> \ 
          <sear:searchUserBasicData> \ 
          <!--Optional:--> \ 
          <header> \ 
           <!--Optional:--> \ 
           <chanel>?</chanel> \ 
           <!--Optional:--> \ 
           <ip>?</ip> \ 
           <!--Optional:--> \ 
           <user>?</user> \ 
          </header> \ 
          <!--Optional:--> \ 
          <email>[email protected]</email> \ 
          </sear:searchUserBasicData> \ 
         </soapenv:Body> \ 
        </soapenv:Envelope>' 
    
        $.ajax({ 
         url: productServiceUrl, 
         type: "POST", 
         dataType: "xml", 
         data: soapMessage, 
         complete: endSaveProduct, 
         contentType: "text/xml; charset=\"utf-8\"" 
    
        }); 
    

有了這個代碼即時得到404錯誤從服務器和Im 100%,該SOAP消息是正確的(如我上SOAPUI測試和服務答案如預期)

  • 我也嘗試過這個插件:https://github.com/doedje/jquery.soap調整了一下後,我設法讓它發送正確的請求(我嘗試了SOAPUI並得到了正確的響應),但是,當我在Android模擬器中運行它時有500個錯誤(內部服務器錯誤)。這個特定的錯誤意味着我與服務聯繫,但是XML無法處理(這很奇怪,因爲SOAPui上的XML相同)。我懷疑它是一個CORS錯誤,因爲我在本地主機上運行了所有東西。

  • 一位同事嘗試使用C#的控制檯應用程序,該應用程序從服務中獲得正確的答案。我們想過做一個C#庫,用於調用服務但我們還不知道如何調用從科爾多瓦

我的問題一個C#方法,所有的方法:應該是什麼我的下一步是什麼?創建一個調用服務的API,繼續嘗試C#庫或其他不同的東西?

+0

下一步應該搞清楚如何使你的代碼上面的工作,因爲這是最好的辦法。我一直使用它,它應該工作。我看不到您的代碼有任何問題。你沒有得到Ajax的結果(即'success'和'failure'而不是'complete'),但那是另一回事。嘗試改變'contentType'爲這個'contentType:「text/xml」,並讓我知道。 –

+0

剛剛做了,並且404錯誤仍然存​​在。任何其他的消化?無論如何感謝 – Silver

回答

0

就像我說的,Ajax調用是您的案例(使用Cordova)的最佳方法。我一直使用它,它應該工作。我看不出您的代碼存在任何問題,因此我們先來弄清楚發生了什麼問題。要做到這一點,使用標準HTML頁面進行測試要容易得多。對於我使用的每個API/Web服務,我都有這樣的HTML測試頁面。我已經爲你創建了一個。將代碼複製到計算機上的HTML頁面,編輯SOAP消息以包含所需的信息,然後單擊[Test Directly]按鈕進行測試。一旦它工作,您可以嘗試[通過Ajax測試]按鈕通過Ajax提交完全相同的消息。讓我們知道結果。

function TestAjax(){ 
 
    var productServiceUrl = "http://localhost/searchUserDataWS/SearchUserDataWS?wsdl"; 
 

 
    var soapMessage = document.getElementById("mesage").innerHTML; 
 

 
    $.ajax({ 
 
     url: productServiceUrl, 
 
     type: "POST", 
 
     dataType: "xml", 
 
     data: soapMessage, 
 
     contentType: "text/xml;", 
 
     success: function (result) { document.write(result); }, 
 
     error: function (error) { document.write(error); }, 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<html><header><title>Test My API</title></header> 
 
<body> 
 
<form method="POST" action="http://localhost/searchUserDataWS/SearchUserDataWS?wsdl"> 
 
<textarea id="mesage" style="width: 100%; height: 350px;"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://searchuserdataws.alist.integra.la/"> 
 
     <soapenv:Header></soapenv:Header> 
 
     <soapenv:Body> 
 
      <sear:searchUserBasicData> 
 
      <!--Optional:--> 
 
      <header> 
 
       <!--Optional:--> 
 
       <chanel>?</chanel> 
 
       <!--Optional:--> 
 
       <ip>?</ip> 
 
       <!--Optional:--> 
 
       <user>?</user> 
 
      </header> 
 
      <!--Optional:--> 
 
      <email>[email protected]</email> 
 
      </sear:searchUserBasicData> 
 
     </soapenv:Body> 
 
    </soapenv:Envelope></textarea> 
 
<br/><br/> 
 
<input type="submit" value="Test Directly" /> 
 
<input type="button" value="Test Via Ajax" onclick="TestAjax();" /> 
 
</form> 
 
</html> 
 
</body>

+0

直接填寫請求和測試後,我得到了一個XML文檔中的「讀取XMLStreamReader時出錯」,AJAX也失敗了(它返回了[object Object],但是在改寫錯誤部分之後,簡單地寫上'

錯誤

'我得到了,所以阿賈克斯失敗 我不是很熟悉SOAP,但在谷歌快速後,問題似乎是發送的XML被認爲是一個SOAP請求任何消化什麼我在做錯了請求? – Silver

+0

就像我說過的,在通過Direct按鈕解決它之前,嘗試使用Ajax按鈕是毫無意義的。由於Direct按鈕失敗,這意味着Ajax不是問題(這是我在開始時告訴你的)。問題出現在您發送的Soap消息中或web服務代碼中,如果沒有,我們無法提供幫助看到該代碼,所以你可以更新你的問題,並在那裏添加代碼,並提及哪一行拋出異常。 –

+0

我目前無法訪問web服務代碼。在簡短的討論之後,我們決定嘗試使用本機代碼來提出請求,因爲我們已經在Java和C#中使用SOAP方面的專業知識。隨着我們的進展,我會不斷更新問題並提供更多信息 感謝您的快速幫助,因爲它讓我們對下一步該做什麼有所瞭解,並且我會找到答案,我也會發布它。 – Silver

相關問題