Pular para o conteúdo principal

[SoapUi] Removendo comentários "Optional" em Web Services

O SoapUI é uma ferramenta de geração de testes client criada para facilitar a vida tanto de desenvolvedores quanto dos testers de Web Services. Através dela, o usuário tem a possibilidade de gerar projetos a partir da URL do WSDL do serviço. Através disso uma requisição de ação (request action) será gerada com os parâmetros do método requerido já carregados inicialmente.


Independente da tecnologia WS usada, o SoapUI tem o poder de reconhecer os parâmetros, em vista da universalidade do xml usada na especificação. Além disso, é possível observar também a presença do comentários que vem precedidos de cada campo. Como mostrado na figura abaixo.

Figura 1. Código exemplo de request action no SoapUi

Esse tipo de comentário existe para o caso em que o número mínimo de ocorrências para o parâmetro é zero. Se o elemento for obrigatório o SoapUi não exibe nada acima. E é ainda onde entra a questão... Como fazer?
Suponha que você tenha um WSDL semelhante ao exibido na listagem abaixo:

<xsd:element name="inserirPessoa">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="id" type="xsd:int" minOccurs="1" maxOccurs="1" />
      <xsd:element name="email" type="xsd:string" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

efinição dos atributos minOccurs e maxOccurs pode ser justificada da seguinte maneira:
minOccurs="0" maxOccurs="1" -> significa opcional;
minOccurs="1" maxOccurs="1" -> significa obrigatório.

A utilização do maxOccurs não é obrigatória, logo, você pode usar apenas o atributo "minOccurs" setado com o valor 1 e tudo vai funcionar perfeitamente também.

O resultado na geração do XML de entrada no SoapUi será algo semelhante a:

<soapenv:Body>
  <xsd:inserirPessoa>
    <xsd:id>?</xsd:id>
    <!--Optional:-->
    <xsd:email>?</xsd:email>
  </xsd:inserirPessoa>
</soapenv:Body>

O situação muda um pouco de cor quando lidamos com a geração de WS utilizando annotations java da especificação JEE atreladas aos famosos EJBs. Neste caso, a anotação @WebService permite que você mapeie um POJO simples com todos os atributos sendo automaticamente associados aos parâmetros do serviço. Por exemplo, considere a classe simples abaixo:

public class Aluno {
    private int id;
    private String nome;
    
    // get's e set's
}

Você poderá ter o mesmo efeito empregado usando uma anotação também do pacote do JaxB:
public class Aluno {
    private int id;
    @XmlElement(required = true, nillable = false)
    private String nome;
    
    // get's e set's
}

O atributo required diz que o valor é obrigatório e o atributo nillable diz que o valor não poderá ser nulo.

Conclusão

As abordagens são relativamente simples, mas compensam o uso e conhecimento por facilitar a vida de quem irá testar ou receber o Web Service. A anotação dá a impressão de que o campo é opcional quando não é.

Em algumas versões das api's de WS o exemplo com annotations pode não funcionar. Se isso acontecer então solicite a atualização das bibliotecas. Alguns erros do tipo acontecem porque a versão não contempla os respectivos fixes. :)

Comentários

Postagens mais visitadas deste blog

Como acessar um iframe e seus elementos via jQuery?

Recentemente tive um problema no projeto pois sentiu a necessidade de acessar um valor de um input que estava dentro de um iframe. Esse tipo de situação não é tão comum, uma vez que geralmente acessamos os valores do iframe para fora.

Para acessar, de dentro de um iframe, um valor externo, utilizamos o seguinte código: $('#idDoElementoExterno', parent.document).val();Entretanto, nunca tínhamos passado pela situação contrária. Pesquisando um pouco descobrimos uma alternativa, porém em JavaScript. Para ficar melhor o entendimento, vamos simular uma situação aqui. Temos uma página html "A.html" e dentro da mesma existe um iframe que aponta (src) para uma página "B.html":

<!-- A.html --> <html> <head> <title>Testando iframe - jQuery</title> <script language="JavaScript"> function exibeValor() { // alert aqui! } </script> </head> <body> <input type="button" v…

"Content is not allowed in prolog" - Entendendo exceção no Seam

Recentemente tive um problema de edição em um arquivo .xhtml utilizando JBoss Seam, Richfaces e afins.

A princípio a mensagem de erro não dizia muito a respeito da causa do mesmo:
com.sun.facelets.FaceletException: Error Parsing /consulta.xhtml: Error Traced[line: 1] Content is not allowed in prolog.
"O conteúdo não é permitido no prólogo". Mas que conteúdo? Em qual prolog?
Depois de dar uma pesquisada descobri que o erro acontece em vista de terem sido colocados alguns caraceteres inválidos antes da declaração de documento xml na página xhtml.
Em outras palavras, a primeira coisa que deve constar em um documento xml (afins) deve ser:
<?xml version="1.0" encoding="utf-8"?>
Qualquer coisa antes disso, até mesmo um simples espaço em branco, pode gerar o erro em questão.
Por fim, lembre-se de que a declaração de documento xml segue o padrão de encoding definido. Logo temos:
<!-- Incorreto --> <?xml version="1.0" encoding="UTF-8"?>…

Integrando Android e PayPal com Java e MySQL - Parte 2

Na primeira parte deste artigo, nós cobrimos toda a configuração inicial do ambiente, envolvendo principalmente o projeto Java Web com Restful, as bibliotecas e ferramentas envolvidas, bem como suas respectivas versões.


Criamos também toda a comunicação com o banco de dados, o modelo Entidade-Relacionamento, o SQL gerado e as configurações da API do PayPal SDK para Java.

Nessa parte, focaremos em finalizar a aplicação de modelo, principalmente no lado Android, testando tudo de forma local.

Você poderá efetuar o download do código fonte diretamente do meu GitHub, no botão abaixo:

DOWNLOAD CÓDIGO
Na Figura 1 abaixo você pode visualizar como ficarão nossas telas ao final da implementação:
Configurando o projeto Android Antes de criar o projeto, precisamos efetuar o download do PayPal Android SDK. Extraia os arquivos em uma pasta de preferência.

Mais uma vez, você pode se sentir à vontade para usar o Eclipse Android Bundle ou o AndroidStudio para programar a parte Android, desde que tenha…