2016-01-19 2 views
3

Je suis un débutant dans Codename Un & je dois consommer un service Web (x.x.x.x/xxMobileWebService/xxService.asmx). Je l'ai fait avec succès dans le développement natif android en utilisant kSoap.Consommez service Web .NET dans Codename un

Y a-t-il un moyen d'accéder au service web .Net dans Codename One?

Modifier ----------------------------------------- -------------------------------------------------- -------------

Voici mon élément XML:

<soap:envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> 
<soap:body> 
    <getcommonalldataresponse xmlns='http://tempuri.org/'> 
    <getcommonalldataresult> 
    <xs:schema xmlns:msprop='urn:schemas-microsoft-com:xml-msprop' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns='' id='NewDataSet'> 
    <xs:element msdata:usecurrentlocale='true' msdata:isdataset='true' name='NewDataSet'> 
     <xs:complextype> 
     <xs:choice maxoccurs='unbounded' minoccurs='0'> 
     <xs:element name='Table' msprop:refcursorname='REFCursor'> 
     <xs:complextype> 
      <xs:sequence> 
      <xs:element name='NAME' type='xs:string' minoccurs='0' msprop:oradbtype='126'> 
      </xs:element> 
      </xs:sequence> 
     </xs:complextype> 
     </xs:element> 
     </xs:choice> 
     </xs:complextype> 
    </xs:element> 
    </xs:schema> 
    <diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1'> 
    <newdataset xmlns=''> 
     <table diffgr:id='Table1' msdata:roworder='0'> 
     <name> 
     'Kasthuriarachchi' 
     </name> 
     </table> 
    </newdataset> 
    </diffgr:diffgram> 
    </getcommonalldataresult> 
    </getcommonalldataresponse> 
</soap:body> 
</soap:envelope> 

Ce que je blême pour obtenir des données est de chaîne ('Kasthuriarachchi') à l'intérieur balise [nom] .

Répondre

2

Si votre service Web renvoie un fichier XML, vous pouvez simplement utiliser codenameone ConnectionRequest et XMLParser. Vous pouvez même construire votre corps de savon et le poster en utilisant buildRequestBody.

Voici un code que j'utilisé dans le passé pour traiter ceci: réponse

final String body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
     + "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" 
     + "     xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \n" 
     + "     xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n" 
     + " <soap12:Body>\n" 
     + "  <DoStuff xmlns=\"http://tempuri.org/\">\n" 
     + "   <SomeVariables>blablabla</SomeVariables>\n" 
     + "  </DoStuff>\n" 
     + " </soap12:Body>\n" 
     + "</soap12:Envelope>\n"; 

ConnectionRequest req = new ConnectionRequest() { 
    @Override 
    protected void buildRequestBody(OutputStream os) throws IOException { 
     super.buildRequestBody(os); 
     os.write(body.getBytes("utf-8")); 
    } 

    @Override 
    protected void handleException(Exception err) { 
     Dialog.show("", "Connection lost, please check your internet and try again", "Ok", null); 
    } 
}; 

req.setUrl("Your_URL_Here"); 
req.addRequestHeader("Content-Type", "text/xml; charset=utf-8"); //application/soap+xml 
req.addRequestHeader("Content-Length", body.length() + ""); 
req.setPost(true); 

InfiniteProgress prog = new InfiniteProgress(); 
Dialog dlg = prog.showInifiniteBlocking(); 
req.setDisposeOnCompletion(dlg); 
NetworkManager.getInstance().addToQueueAndWait(req); 
byte[] data = req.getResponseData(); 

try { 
    ByteArrayInputStream bais = new ByteArrayInputStream(data); 
    InputStreamReader reader = new InputStreamReader(bais); 
    XMLParser parser = new XMLParser(); 
    Element elem = parser.parse(reader); 
    String name = ((Element) elem.getDescendantsByTagName("name").firstElement()).getChildAt(0).getText(); 
    System.out.println(name); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

XML pour lire la valeur de name étiquette de:

<soap:envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> 
<soap:body> 
    <getcommonalldataresponse xmlns='http://tempuri.org/'> 
    <getcommonalldataresult> 
    <xs:schema xmlns:msprop='urn:schemas-microsoft-com:xml-msprop' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns='' id='NewDataSet'> 
    <xs:element msdata:usecurrentlocale='true' msdata:isdataset='true' name='NewDataSet'> 
     <xs:complextype> 
     <xs:choice maxoccurs='unbounded' minoccurs='0'> 
     <xs:element name='Table' msprop:refcursorname='REFCursor'> 
     <xs:complextype> 
      <xs:sequence> 
      <xs:element name='NAME' type='xs:string' minoccurs='0' msprop:oradbtype='126'> 
      </xs:element> 
      </xs:sequence> 
     </xs:complextype> 
     </xs:element> 
     </xs:choice> 
     </xs:complextype> 
    </xs:element> 
    </xs:schema> 
    <diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1'> 
    <newdataset xmlns=''> 
     <table diffgr:id='Table1' msdata:roworder='0'> 
     <name> 
     'Kasthuriarachchi' 
     </name> 
     </table> 
    </newdataset> 
    </diffgr:diffgram> 
    </getcommonalldataresult> 
    </getcommonalldataresponse> 
</soap:body> 
</soap:envelope> 
+0

Merci beaucoup! M. Diamond. – user2881604

+0

M. Diamond sur le simulateur fonctionne bien. Mais quand je l'essaie sur un périphérique, il y a une erreur [400: mauvaise requête]. des idées plz ..? – user2881604

+1

S'il vous plaît poster un peu de code ... Titre en tant que modifier sous votre question. Remplacer les informations sensibles par des espaces réservés Testez-vous sur iOS? – Diamond