Você está aqui: PHP ::: PHP + SOAP Web Services ::: WSDL (Web Services Description Language)

Usando a ferramenta php2wsdl para gerar um documento WSDL (Web Services Definition Language) a partir de nossas classes PHP

Quantidade de visualizações: 5283 vezes
Embora seja possível escrever web services baseados em SOAP sem um documento WSDL, é prática comum disponibilizá-lo, visto que há muitas ferramentas que conseguem analisar um arquivo WSDL, extrair seus métodos (com seus devidos parâmetros e retornos) e contruir as requisições ao serviço web.

Nesta dica eu mostrarei como usar a ferramenta php2wsdl (PHP WSDL Generator) para construir um arquivo WSDL automaticamente a partir da leitura de uma ou mais classes PHP. Para isso, siga atentamente os passos abaixo:

1) Faça o download do PHP WSDL Generator. É muito fácil encontrá-lo na internet. Uma boa fonte é o endereço http://www.phpclasses.org. Quando encontrar um arquivo com o nome de php2wsdl, faça o download. É bem provável que esta seja a ferramenta que procuramos.

2) Descompacte o arquivo e mova o seu conteúdo para o diretório da sua aplicação PHP. No exemplo importaremos a classe WSDLCreator que estará no diretório php2wsdl.

3) Crie a classe abaixo na raiz da sua aplicação:

Código para Calculadora.php:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?
  class Calculadora{   
    /**
    * Soma dois valores
    *
    * @param float $n1
    * @param float $n2
    * @return float
    */
    public function somar($n1, $n2){
      return ($n1 + $n2);
    }
  }
?>

Veja que esta classe contém um método somar() que recebe dois valores numéricos e retorna um outro valor númerico. Note que inseri a documentação correspondente para facilitar o trabalho do php2wsdl.

4) Vamos agora escrever o documento PHP que fará a ligação entre o php2wsdl e a classe Calculadora. Veja o código a seguir:

Código para gerar_wsdl.php:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?
  // importamos a classe WSDLCreator.php
  require("php2wsdl/WSDLCreator.php");
  // informamos o nome do namespace e o endereço do arquivo WSDL
  $wsdl_creator = new WSDLCreator("CalculadoraWSDL",
     "http://www.arquivodecodigos.net/estudos_soap/arquivo.wsdl");
  // adicionamos a classe Calculadora 
  $wsdl_creator->addFile("Calculadora.php");
  // agora indicamos a URL para acessar os métodos da classe Calculadora
  $wsdl_creator->addURLToClass("Calculadora",
     "http://www.arquivodecodigos.net/estudos_soap/servidor.php");
  // criamos o arquivo WSDL
  $wsdl_creator->createWSDL();
  // e o salvamos com o nome desejado
  $wsdl_creator->saveWSDL("arquivo.wsdl");
?>

Neste momento já podemos executar o arquivo gerar_wsdl.php. Abra-o no seu navegador e verifique o arquivo "arquivo.wsdl" gerado. Sua estrutura será algo como:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?xml version='1.0' encoding='UTF-8'?>
<!-- WSDL file generated by PHP WSDLCreator (http://www.protung.ro) -->
<definitions name="CalculadoraWSDL" targetNamespace="urn:CalculadoraWSDL" 
xmlns:typens="urn:CalculadoraWSDL" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns="http://schemas.xmlsoap.org/wsdl/">
  <message name="somar">
    <part name="n1" type="xsd:float"></part>
    <part name="n2" type="xsd:float"></part>
  </message>
  <message name="somarResponse">
    <part name="somarReturn" type="xsd:float"></part>
  </message>

  <portType name="CalculadoraPortType">
    <operation name="somar">
      <documentation>Soma dois valores</documentation>
      <input message="typens:somar"></input>
      <output message="typens:somarResponse"></output>
    </operation>
  </portType>

  <binding name="CalculadoraBinding" type="typens:CalculadoraPortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http">
    </soap:binding>
    <operation name="somar">
      <soap:operation soapAction="urn:CalculadoraAction"></soap:operation>
      <input>
        <soap:body namespace="urn:CalculadoraWSDL" use="encoded" 
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        </soap:body>
      </input>
      <output>
        <soap:body namespace="urn:CalculadoraWSDL" use="encoded" 
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        </soap:body>
      </output>
    </operation>  
  </binding>
  
  <service name="CalculadoraWSDLService">
    <port name="CalculadoraPort" binding="typens:CalculadoraBinding">
      <soap:address 
        location="http://www.arquivodecodigos.net/estudos_soap/servidor.php">
      </soap:address>
    </port>
  </service>
</definitions>

Obteve algo parecido? Vamos continuar então.

5) Agora que já criamos a classe Calculadora para representar as operações do nosso web service e já geramos o arquivo WSDL, chegou a hora de criar o servidor SOAP. Veja o código:

Código para servidor.php:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<? 
  // importamos a class Calculadora
  require("Calculadora.php");

  // criamos uma nova instância da classe SoapServer fornecendo o arquivo WSDL
  $servidor = new SoapServer('arquivo.wsdl');
  // definimos a classe responsável por executar os métodos descritos no WSDL
  $servidor->setClass("Calculadora");
  // e finalmente gerenciamos a requisição
  $servidor->handle();
?>

Note que nunca chamamos servidor.php diretamente no navegador. Em vez disso efetuamos uma chamada ao arquivo "arquivo.wsdl" a partir da página cliente.php e o próprio arquivo WSDL se encarrega de fazer a ponte com o servidor.php. Veja agora o código para o cliente.php:

Código para cliente.php:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?
  // vamos evitar que o arquivo WSDL seja colocado no cache
  ini_set("soap.wsdl_cache_enabled", "0");
 
  try{
     // definimos o endereço do arquivo WSDL
     $cliente = new SoapClient("http://www.arquivodecodigos.net/estudos_soap/arquivo.wsdl");
     // disparamos o método somar();
     $resultado = $cliente->somar(4, 11);
     // mostramos o resultado
     echo "A soma dos dois valores é: " . $resultado;
  } 
  catch(SoapFault $erro){ // houve algum erro?
     var_dump($e);
  }
?>

6) Penso que já estamos prontos para o teste final. Se você seguiu todos os passos atenciosamente, já pode chamar o arquivo cliente.php no seu navegador. Se tudo correr bem, você verá o seguinte resultado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

A soma dos dois valores é: 15


Link para compartilhar na Internet ou com seus amigos:

JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como retornar o índice da primeira ocorrência de um elemento em um array do JavaScript usando a função indexOf()

Quantidade de visualizações: 2131 vezes
Em algumas ocasiões nós precisamos obter e retornar o índice da primeira ocorrência de um determinado elemento em um array JavaScript. Para isso podemos usar a funções indexOf(). Se o elemento não puder ser encontrado, o valor -1 é retornado.

Veja um exemplo de seu uso:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<script type="text/javascript">
  var valores = new Array(1, 2, 3, 2, 2, 4, 5);
  // vamos obter o índice da primeira ocorrência
  // do elemento com o valor 2
  var indice = valores.indexOf(2);
  window.alert("Elemento encontrado no índice: " 
    + indice);
</script>

Execute o código e veja que o elemento foi encontrado no índice 1, ou seja, na segunda posição do array, já que os índices de vetor e matriz em JavaScript começam a partir de 0.

Experimente pesquisar o valor 50 e verá que o valor retornado é -1, indicando que o elemento não foi encontrado.


C++ ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como usar vetores e matrizes (arrays) na linguagem C++

Quantidade de visualizações: 37264 vezes
Vetores e matrizes, também chamados de arrays em programação, são grupos consecutivos de locais na memória que possuem o mesmo tipo de dados, ou seja, um vetor ou matriz em C++ pode conter apenas elementos do mesmo tipo.

Um vetor é uma matriz de um coluna e várias linhas, enquanto uma matriz é a matriz propriamente dita, ou seja, que possui várias linhas e várias colunas.

Veja um trecho de código no qual temos um vetor contendo 5 elementos do tipo int:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  // declara e inicializa a matriz
  int valores[5] = {65, 3, 8, 41, 12};
 
  // exibe os elementos da matriz
  for(int i = 0; i < 5; i++){
    cout << "Posição: " << i <<
      " - Valor: " << valores[i] << endl;
  }
 
  system("PAUSE"); // pausa o programa
  return 0;
}

Ao executarmos este código nós teremos o seguinte resultado:

Posição: 0 - Valor: 65
Posição: 1 - Valor: 3
Posição: 2 - Valor: 8
Posição: 3 - Valor: 41
Posição: 4 - Valor: 12
Pressione qualquer tecla para continuar. . .

Aqui nós usamos a técnica de declarar e inicializar o vetor em uma mesma linha. Em seguida usamos um laço para percorrer todos os elementos. Veja que os elementos do vetor são acessados usando um índice que começa em 0 e vai até a quantidade de elementos menos 1.

Veja agora um trecho de código que declara um vetor e inicializa seus elementos usando um laço for:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  // declara a matriz
  int valores[5];
 
  // inicializa os elementos usando um laço
  for(int i = 0; i < 5; i++){
    valores[i] = 2 * i;
  }
 
  // exibe os elementos da matriz
  for(int i = 0; i < 5; i++){
    cout << "Posição: " << i <<
      " - Valor: " << valores[i] << endl;
  }
 
  system("PAUSE"); // pausa o programa
  return 0;
}

Ao executarmos este código nós teremos o seguinte resultado:

Posição: 0 - Valor: 0
Posição: 1 - Valor: 2
Posição: 2 - Valor: 4
Posição: 3 - Valor: 6
Posição: 4 - Valor: 8
Pressione qualquer tecla para continuar. . .

É importante notar que, se não inicializados, os valores dos elementos de um vetor poderão guardar valores aleatórios. Jamais confie que eles terão o valor 0 por padrão.


Java ::: Dicas & Truques ::: Input e Output (Entrada e Saída)

Java para iniciantes - Como usar a classe File em suas aplicações Java

Quantidade de visualizações: 10474 vezes
A classe File, contida no pacote java.io, é uma representação abstrata de nomes de arquivos e diretórios. Veja sua posição na hierarquia de classes Java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

java.lang.Object
  java.io.File

Esta classe implementa as interfaces: Serializable e Comparable<File>. Instâncias desta classe são imutáveis, ou seja, uma vez criado, o caminho abstrato representado por um objeto File nunca mudará.

É importante observar que, ao criar uma instância de File, como no código abaixo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

File arquivo = new File("C:\\", "texto.txt");

o arquivo "texto.txt" não será criado. O que temos é a construção de um objeto File. Da mesma forma, quando destruímos um objeto File, o arquivo representado por ele no sistema não será excluído.


C ::: Dicas & Truques ::: Data e Hora

Como formatar datas e horas em C usando a função strftime() da linguagem C

Quantidade de visualizações: 8020 vezes
A função strftime() pode ser usada quando queremos formatar valores de datas e horas em C. Esta função, presente no header <time.h>, possui a seguinte assinatura:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

size_t strftime(char *strDest, size_t maxsize, const char *format,
   const struct tm *timeptr);

O parâmetro strDest é um ponteiro para uma matriz de caracteres que receberá uma string contendo a data e/ou hora formatada. O parâmetro maxsize é a quantidade de caracteres que serão copiados para a matriz de caracteres alvo da operação. O parâmetro format contém os especificadores que serão substituídos durante a formatação. Finalmente, timeptr é um ponteiro para uma estrutura tm contendo as informações de data e hora. O retorno da função é a quantidade de caracteres copiados para a matriz strDest.

Veja um trecho de código no qual formatamos e exibimos a data atual no formato longo e de acordo com as configurações regionais para o Português Brasileiro:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>

int main(int argc, char *argv[]){
  // vamos definir a localização para o Português do Brasil
  setlocale(LC_ALL, "Portuguese_Brazil");

  time_t data_hora_segundos; // guarda os segundos deste 01/01/1970
  struct tm *timeinfo; // declara uma estrutura tm
  time(&data_hora_segundos); // preenche a variável data_hora_segundos
  // preenche a estrutura timeinfo
  timeinfo = localtime(&data_hora_segundos);
  // um buffer para receber a data formatada
  char data_formatada[80];

  // vamos formatar
  strftime(data_formatada, 80, "%A, %d de %B de %Y", timeinfo);

  // vamos exibir o resultado
  printf("Resultado da formatação: %s\n\n", data_formatada);

  system("PAUSE");
  return 0;
}

O resultado da execução deste código será algo como:

Resultado da formatação: segunda-feira, 23 de abril de 2011

Veja abaixo os especificadores de formatação usadas pela função strftime():

%a - Nome do dia da semana na forma abreviada. Ex: seg.
%A - Nome completo do dia da semana. Ex: terça-feira.
%b - Nome do mês abreviado. Ex: abr.
%B - Nome completo do dia do mês. Ex: abril
%c - Representação de data e hora. Ex: 23/4/2011 23:00:37.
%d - Dia do mês (01-31).
%H - Hora no formato 24 horas (00-23).
%I - Hora no formato 12 horas (01-12).
%j - Dia do ano (001-366).
%m - Mês como um número decimal (01-12).
%M - Minutos (00-59).
%p - AM ou PM.
%S - Segundos (00-61).
%U - Número da semana tendo o primeiro domingo como o primeiro dia da primeira semana do ano (00-53).
%w - Dia da semana como um número decimal tendo o domingo como 0 (0-6).
%W - Número da semana tendo a primeira segunda-feira como o primeiro dia da primeira semana do ano (00-53).
%x - Representação de data. Ex: 23/4/2011.
%X - Representação de horas. Ex: 23:00:37.
%y - Ano de dois dígitos (00-99).
%Y - Ano com quatro dígitos.
%Z - Nome ou abreviação do fuso horário.
%% - Um sinal de porcentagem.


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Métodos, Procedimentos e Funções

Métodos - Exercícios Resolvidos de Java - Ex. 4 - Um método estático que recebe dois números inteiros e retorna o maior deles

Quantidade de visualizações: 3872 vezes
Pergunta/Tarefa:

Escreva um método Java que recebe dois números inteiros e retorna o maior deles. Este método deverá ter a seguinte assinatura:

public static int maior(int a, int b){
  // sua implementação aqui
}
Este método deverá, obrigatoriamente, estar na classe principal (aquela que contém o método main()). Peça ao usuário para fornecer dois números inteiros e use o método desenvolvido para retornar o maior deles.

Sua saída deverá ser parecida com:



Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    
    // vamos solicitar que o usuário informe dois numeros inteiros
    System.out.print("Informe o primeiro número: ");
    int num1 = Integer.parseInt(entrada.nextLine());
    System.out.print("Informe o segundo número: ");
    int num2 = Integer.parseInt(entrada.nextLine());
    
    // obtém o número maior
    int numeroMaior = maior(num1, num2);
    System.out.println("O numero maior é: " + numeroMaior);
    
    System.out.println("\n");
  }
  
  // um método estático que recebe dois números inteiros e retorna o maior deles
  public static int maior(int a, int b){
    if(a > b){
      return a;  
    }
    else{
      return b;  
    }
  }
}



Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 94 usuários muito felizes estudando em nosso site.