Artisan Développeur

Qualité, amélioration continue, agilité.

auto completion XFT (xml) with eclipse

Hello !

I have to do some XFT transaction for e-tourisme dev. I planed to use NuSoap in Symfony2, see my previous post.

I work with eclipse, and I want to have auto completion for my XFT transaction to enhance my dev (life) quality ^^

First thing to do is adding the xsd catalog to « eclipse xml catalog ».

Go « Windows -> preferences -> XML -> Catalog »
preference_xml_catalog

Add a new catalog, I choose to save the XSD file into my workspace.

preference_xml_catalog1

preference_xml_catalog2

To test it, I create a « New Xml file » with the assistant

preference_xml_catalog3

choose « Create XML file from an XML schema file »

preference_xml_catalog4

Choose my new catalog in the list (www.exchangefortravel.org)

preference_xml_catalog5

Choose without prefix (I’m not a xml guru, I don’t think I need prefix for my project, but it’s probably not the best answer for everyone).

If I don’t uncheck all checkboxes, eclipse is working, and do nothing, I suppose it’s the last option. But remember, I use this assistant just once, to see how the first line with the namespace is created.

preference_xml_catalog6-noPrefix

That’s it ! I’ve the first line, with the namespace. The generated tag is Access, I change it by « Transaction », I add <Control> and, when I open a new « < »  I see the auto completion.

preference_xml_catalog7

Feel free to ask, to comment, to critic, to enhance, to share 🙂

Nicolas

 

 

 

Utiliser nuSOAP Bundle avec Symfony2

Comment utiliser nuSOAP Bundle, avec Symfony2 !

J’ai besoin d’utiliser des webservices SOAP, je veux utiliser nuSOAP, après quelques recherches, je vois le bundle symfony2 de nuSOAP.

Sur leur doc, il y a ça :

[pastacode lang= »markup » message= » » highlight= » » provider= »manual »]

{
    "require": {
        "noiselabs/nusoap-bundle": "dev-master"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nusphere/nusoap",
                "version": "0.9.5",
                "dist": {
                    "url": "http://downloads.sourceforge.net/project/nusoap/nusoap/0.9.5/nusoap-0.9.5.zip",
                    "type": "zip"
                },
                "autoload": {
                    "classmap": ["lib/"]
                }
            }
        }
    ],
}

[/pastacode]

Je met ça dans mon composer.json et j’obtiens des erreurs lorsque je lance composer, en mettant ce code à la fin de mon fichier, ça me désinstallait une partie des bundle (je ne suis pas très familier avec composer).

J’ai pris la ligne require que j’ai simplement ajouté , il faut penser à finir la ligne du dessus par une virgule:

[pastacode lang= »markup » message= » » highlight= »17″ provider= »manual »]

    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "~2.4",
        "doctrine/orm": "~2.2,>=2.2.3",
        "doctrine/doctrine-bundle": "~1.2",
        "twig/extensions": "~1.0",
        "symfony/assetic-bundle": "~2.3",
        "symfony/swiftmailer-bundle": "~2.3",
        "symfony/monolog-bundle": "~2.4",
        "sensio/distribution-bundle": "~2.3",
        "sensio/framework-extra-bundle": "~3.0",
        "sensio/generator-bundle": "~2.3",
        "incenteev/composer-parameter-handler": "~2.0",
        "doctrine/doctrine-fixtures-bundle": "2.2.*",
        "ddeboer/data-import": "@stable",
        "ddeboer/data-import-bundle": "~0.1",
        "noiselabs/nusoap-bundle": "dev-master"
    },

[/pastacode]

Et à la fin du fichier, j’ai ajouté le repository de type « package », il faut ajouter une virgule après le } de la section « extra » et coller le code :

[pastacode lang= »markup » message= » » highlight= » » provider= »manual »]

 "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nusphere/nusoap",
                "version": "0.9.5",
                "dist": {
                    "url": "http://downloads.sourceforge.net/project/nusoap/nusoap/0.9.5/nusoap-0.9.5.zip",
                    "type": "zip"
                },
                "autoload": {
                    "classmap": ["lib/"]
                }
            }
        }
    ]

[/pastacode]

 

Voici mon fichier composer.json avec nuSOAP Bundle qui fonctionne en entier.

[pastacode lang= »markup » message= » » highlight= »25,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74″ provider= »manual »]

{
    "name": "symfony/framework-standard-edition",
    "license": "MIT",
    "type": "project",
    "description": "The \"Symfony Standard Edition\" distribution",
    "autoload": {
        "psr-0": { "": "src/" }
    },
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "~2.4",
        "doctrine/orm": "~2.2,>=2.2.3",
        "doctrine/doctrine-bundle": "~1.2",
        "twig/extensions": "~1.0",
        "symfony/assetic-bundle": "~2.3",
        "symfony/swiftmailer-bundle": "~2.3",
        "symfony/monolog-bundle": "~2.4",
        "sensio/distribution-bundle": "~2.3",
        "sensio/framework-extra-bundle": "~3.0",
        "sensio/generator-bundle": "~2.3",
        "incenteev/composer-parameter-handler": "~2.0",
        "doctrine/doctrine-fixtures-bundle": "2.2.*",
        "ddeboer/data-import": "@stable",
        "ddeboer/data-import-bundle": "~0.1",
        "noiselabs/nusoap-bundle": "dev-master"
    },
    "scripts": {
        "post-install-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ],
        "post-update-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ]
    },
    "config": {
        "bin-dir": "bin"
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "incenteev-parameters": {
            "file": "app/config/parameters.yml"
        },
        "branch-alias": {
            "dev-master": "2.4-dev"
        }
        
    },    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nusphere/nusoap",
                "version": "0.9.5",
                "dist": {
                    "url": "http://downloads.sourceforge.net/project/nusoap/nusoap/0.9.5/nusoap-0.9.5.zip",
                    "type": "zip"
                },
                "autoload": {
                    "classmap": ["lib/"]
                }
            }
        }
    ]


}

[/pastacode]

Pour finir le code de mon controller, qui utilise un service de météo, juste pour initialiser et tester le SOAP.

[pastacode lang= »php » message= » » highlight= » » provider= »manual »]

    /**
     * @Route("/Connect")
     * @Template()
     */
    public function ConnectAction()
    {
      $error = "";

      $client = new \nusoap_client('http://www.webservicex.net/globalweather.asmx?WSDL', 'wsdl');					
      
      $err = $client->getError();
      if ($err) {
	      $error .= "<h2>Constructor error</h2><pre>" . $err . "</pre>";
      }
     
      $param = array('CountryName' => 'FRANCE');

      $result = $client->call('GetCitiesByCountry', array('parameters' => $param), '', '', false, true);

      // Check for a fault
      if ($client->fault) {
	$error .= "<h2>Fault</h2><pre>";
	$error .= print_r($result);
	$error .= "</pre>";
      } else {
	// Check for errors
	$err = $client->getError();
	  if ($err) {
		  // Display the error
		  $error .= "<h2>Error</h2><pre>" . $err . "</pre>";
	  } else {
		  // Display the result
		  $resultat["resultat"] = $result;
		  
	  }
	}

	$xml = simplexml_load_string($result["GetCitiesByCountryResult"]);

	foreach ($xml->Table as $character) {
	  echo $character->City."</br>";
	}

		
	return $resultat;

    }

[/pastacode]

 

 

 

 

 

 

 

 

 

 

 

 

 

Get started node.js

Je me lance ! Un pote me parle de node.js, forcément c’est pas mon truc le javascript, alors je me dis bon, dans une autre vie. Mais trop tard, quand t’es passionné de prog, de web et que t’as des trucs à faire, tu finis par te dire, et si je le faisais en node.js ? Au moins pour essayer, et voilà… Here I am !

Node.js est dispo dans les dépôts backports, il faut donc l’ajouter à votre source.list

[pastacode lang= »bash » message= » » highlight= » » provider= »manual »]

nano /etc/apt/sources.list

[/pastacode]

Ajouter cette ligne dedans :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual »]

deb http://ftp.debian.org/debian wheezy-backports main contrib non-free

[/pastacode]

Avec nano ctrl+o pour sauvegarder, ctrl+x pour fermer, ensuite :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual »]

apt-get update
apt-cache search node.js

ruby-amqp - feature-rich, asynchronous AMQP 0.9.1 client
nodejs - evented I/O for V8 javascript
nodejs-dbg - evented I/O for V8 javascript (debug)
nodejs-dev - evented I/O for V8 javascript (development files)
nodejs-legacy - evented I/O for V8 javascript (legacy symlink)

[/pastacode]

Là je vois que j’ai node.js disponible :

[pastacode lang= »bash » message= » » highlight= » » provider= »manual »]

apt-get install nodejs nodejs-legacy

[/pastacode]

Et après je fais quoi ? Je vais chercher un tuto «hello world» 🙂 Sur le site node.js

Je crée un répertoire, le fichier exemple.js

[pastacode lang= »javascript » message= » » highlight= » » provider= »manual »]

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

[/pastacode]

Je lance la commande:

[pastacode lang= »javascript » message= » » highlight= » » provider= »manual »]

node example.js

[/pastacode]

J’accède avec le navigateur et c’est bon, maintenant y’a plus qu’à apprendre à coder en Javascript !

 Source