Arquivos de sites

Axis 2 – org.apache.axis2.AxisFault: The given SOAPAction … does not match an operation.

E ai pessoal beleza? bom venho aqui para postar a solução de um problema que tive aqui no trabalho, que me custou alguns dias de pesquisa…

Eu estava tentando consumir um webservice de um cliente e estava tomando o seguinte erro:
org.apache.axis2.AxisFault: The given SOAPAction … does not match an operation.

porém pelo soapUI funciona perfeitamente… entao, eu tinha riscado a hipótese de ser algo com o WSDL

tentei gerar o client do axis2 com ADB e com XMLBEANS porém ambos caíram no mesmo erro…
ai finalmente descobri o motivo, o WSDL do cliente realmente tinha algo errado…
os campos soapAction estavam vazios:

<soap:operation soapAction="" style="document" /> 

então  vi que existem 3 maneiras de resolver esse problema… 1ª o cliente arrumar o WSDL dele,
o que vai depender da boa vontade dele… 2ª setar o valor da action em tempo de execução e a 3ª e ultima que é desabilitar essa soap action…

a 2ª opção é fazendo o seguinte:
AlgumaCoisaServiceStub stub = new AlgumaCoisaServiceStub(); //é gerado pelo axis2
stub._getServiceClient().getOptions().setAction(“http://suaaction&#8221;);

eu acho que a action é manipulada diferentemente para cada versão do soap, para especificar a versão utilize:
stub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
(ou a versão SOAP12 da constante).

e a 3º opção é fazer o seguinte:
AlgumaCoisaServiceStub stub = new AlgumaCoisaServiceStub(); //é gerado pelo axis2
stub._getServiceClient().getOptions().setProperty(org.apache.axis2.Constants.Configuration.DISABLE_SOAP_ACTION, true);

Bom… espero que esse post tenha ajudado vocês 😀
se resolver, irá poupar algumas boas horas de pesquisa 😀

Fonte: StackOverflow – Michael Sharek / mstewart

Integrando JSF 2 e Spring

É muito fácil encontrar material sobre JSF 2 de qualidade na internet, mas não se encontra uma forma fácil de realizar a integração com Spring, e quando encontrada, geralmente a integração é feita via xml. Nesse post será mostrado como fazer a integração entre essas duas ferramentas de uma maneira simples usando anotações e um mínimo de xml.

Para trabalhar com o JSF são necessários dois jars:

compile 'com.sun.faces:jsf-api:2.2.0-m04'
compile 'com.sun.faces:jsf-impl:2.2.0-m04'

Por parte do Spring, são os mesmos jars usados para integração com Struts:

compile 'org.springframework:spring-asm:3.1.1.RELEASE'
compile 'org.springframework:spring-beans:3.1.1.RELEASE'
compile 'org.springframework:spring-context:3.1.1.RELEASE' 
compile 'org.springframework:spring-core:3.1.1.RELEASE'
compile 'org.springframework:spring-expression:3.1.0.RELEASE'
compile 'org.springframework:spring-web:3.1.1.RELEASE'

A configuração no web.xml fica assim:

<web-app version=”2.5″ xmlns=”http://java.sun.com/xml/ns/j2ee&#8221;
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
</web-app>
view raw web.xml This Gist brought to you by GitHub.

As tags servlet e servlet-name são para o uso “padrão” do JSF. A classe ContextLoaderListener é quem vai subir o contexto do Spring, também uma configuração comum. O que merece atenção aqui é o RequestContextListener, o qual vai expor o request para que o Spring possa manipulá-lo, permitindo assim que ele faça as injeções no momento adequado.

Por fim, há mais uma alteração que deve ser colocada no faces-config.xml:

<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>

JSF utiliza Expression Language (EL) para determinar a qual classe a página xhtml se refere. Fazendo uso de uma classe chamada ELResolver ele pega a String passada, a interpreta e faz a referência adequada. A classe SpringBeanFacesELResolver proporciona a integração entre os dois frameworks interceptando a requisição e passando-a para o contexto do Spring, o qual a manipula para prover as dependências requeridas pelos ManagedBeans, devolvendo-a em seguida para o ELResolver do próprio JSF.

Para ficar mais claro, vamos ao código. Abaixo, um Dao gerenciado pelo Spring:

@Repository("carroDao")
public class JdbcCarroDao implements CarroDao {

    // métodos aqui
}

Ao utilizar a anotação @Repository, se houver apenas uma implementação para CarroDao, geralmente para o Spring não é necessário que um nome seja especificado, mas ele se faz necessário ao trabalhar com JSF:

@ManagedBean
public class CarroBean {

    @ManagedProperty(name = "dao", value = "#{carroDao}")
    private CarroDao dao;

    public void setDao(final CarroDao dao) {
        this.dao = dao;
    }
}

Agora a anotação @ManagedProperty será usada não apenas para se referir ao que está no escopo web, mas também para lidar com os beans do Spring. A propriedade name é usada para indicar o nome do campo do managedBean, para que o JSF chame o setter adequado, enquanto a propriedade value vai ser usada para referenciar o nome do bean, no caso o carroDao anteriormente especificado.

E é só isso. Fazendo uso do fluxo do próprio JSF, e com algumas poucas configurações, o Spring proporciona uma integração simples e natural, que não altera em nada a forma de trabalhar com JSF.

Fonte: SimpleDev – Juliano Alves

Criando um Web Service em Java utilizando Apache Axis2 e Eclipse

Web services são componentes da aplicação que se comunicam utilizando protocolos abertos. Usando Web Services nós podemos disponibilizar nossas funcionalidades da aplicação para qualquer um. Neste tutorial provê instruções passo a passo para desenvolver Web Services utilizando Web Services Axis2 / SOAP / WSDL e a IDE Eclipse. Vamos começar.

1. Configurando o Ambiente de Desenvolvimento

1.1 Primeiro você precisa configurar o ambiente de desenvolvimento. Os passos a seguir são necessários se você deseja criar um Web Service utilizando Axis2 e a IDE Eclipse.

Algumas versões do eclipse alguns problemas de compatibilidade com Axis2. Este tutorial é testado com Apache Axis2 1.5.2, Eclipse Helios e Apache Tomcat 6.

1) Apache Axis2 Distribuição Binary – Download
2) Apache Axis2 Distribuição WAR – Download
3) Apache Tomcat – Download
4) Eclipse IDE – Download
5) Java instalado no seu computador – Download

1.2. Então você precisa setar as variáveis de ambiente para o Java e Tomcat. Segue as variáveis que devem ser adicionadas:

JAVA_HOME : Sete o valor do diretório do jdk (ex.: C:\Program Files\Java\jdk1.6.0_21)
TOMCAT_HOME : Sete o valor do diretório da sua instalação do Tomcat(ex.: D:\programs\apache-tomcat-6.0.29)
PATH : Sete o valor do diretório bin do seu jdk (ex.: C:\Program Files\Java\jdk1.6.0_21\bin)

1.3. Agora você precisa adicionar o ambiente de execução no eclipse. Vá em Windows > Preferences > Server > Runtime Environments.

Selecione o Apache Tomcat v6.0 e na próxima tela, procure o diretório da instalação do Apache e clique em finish.

1.4. Então clique em Web Service > Axis2 Preferences e procure o diretório do Apache Axis2.

2. Criando o Web Service utilizando a abordagem Bottom-Up (de baixo para cima)

2.1 Primeiro crie um novo Dynamic Web Project (File > New > Other…) e selecione Web > Dynamic Web Project.

2.2 Sete o Apache Tomcat como o Target Runtime e clique em Modify para instalar o Axis2 Web Services no Project Facet.

2.3 Selecione o Axis2 Web Services

2.4 Clique em OK e Próximo. Então você pode escolher as pastas e clique em Finalizar quando estiver feito.

3. Criando a Classe Web Service

Agora você pode criar uma classe Java que você queira expor como Web Service. Eu vou criar uma nova classe chamada FirstWebService e criar um método public chamado addTwoNumbers que recebe 2 inteiros como parâmetro e retorna a adição dos mesmos.

3.1 Clique com o botão direito em  MyFirstWebService no Project Explorer e selecione New > Class e dê  um nome adequado ao pacote e a classe. Eu coloquei o nome do pacote de com.sencide e FirstWebService ao nome da classe.

package com.sencide;
public class FirstWebService {
 public int addTwoNumbers(int firstNumber, int secondNumber){
  return firstNumber + secondNumber;
 }
}

3.2 Agora, selecione File > New > Other e escolha Web Service.

3.3 Selecione a classe FirstWebService como service implementation e para ter certeza que a configuração está correga, clique em Server runtime.

3.4 Selecione Web Service runtime como Axis2 (o default é Axis) e clique em Ok.

3.5 Clique em Next e certifique-se que selecionou a opção Generate a default service.xml file.

3.6 Clique em Next e em Start Server e depois que o servidor for startado você pode finalizar, se você não quizer publicar o Web service no teste de repositório UDDI.

Você pode ir ao link http://localhost:8888/MyFirstWebService/services/listServices para visualizar o seu serviço rodando que foi implantado pleo Axis2. Você pode visualizar o WSDL clicando no link FirstWebService.

A Porta utilizada na URL deve ser de acordo com a porta utilizada pelo seu TomCat !!!

Nós precisamos utilizar o Eclipse toda vez que nós quisermos rodar o serviço, se nós não criarmos o arquivo .aar (Axis Archive) e implantar dentro do servidor (Tomcat). Bom, vamos ver como podemos criar isso.

4. Criando o arquivo .aar (Axis Archive) e implantando o serviço

4.1 Vá ao seu workspace do Eclipse, na pasta MyFirstWebService e lá você pode encontrar seu Web service dentro da pasta de serviços. Vá até este diretório pelo prompt de comando e dê o seguinte comando. Ele vai criar o arquivo FirstWebService.aar lá.

jar cvf FirstWebService.aar com META-INF

4.2 Então copie o arquivo axis2.war, você pode encontralo dentro da pasta do Apache Axis2 (Que você fez o download no primeiro passo) para o diretório webapps do Apache Tomcat. Agora pare o  servidor Apache Tomcat que você está rodando na IDE Eclipse.

4.3 Utilizando o prompt de comando, starte o Apache Tomcat (Vá ao diretório bin e rode o arquivo startup.bat). Agora nós vamos ter um diretório chamado axis2 dentro do diretório webapps. Agora se você acessar o http://localhost:8080/axis2/ você poderá ver a página inicial da Aplicação Web do Axis2.

4.4 clique no link Administration e faça o login utilizando o usário: admin e a senha: axis2. Aqui você pode ver o link do serviço upado no topo esquerdo e lá você pode efetuar o upload do arquivo FirstWebService.aar que criamos.  Isto é igual copiar manualmente o arquivo FirstWebService.aar para o diretório webapps\axis2\WEB-INF\services.

4.5 Agora quando você listar os serviços pelo http://localhost:8080/axis2/services/listServices você deverá conseguir ver o nosso novo serviço adicionado.

5. Criando um cliente Web Service

5.1 Selecione File > New > Other… e escolha Web Service > Web Service Client

5.2 Insira o endereço (WSDL) do nosso serviço (http://localhost:8080/axis2/services/FirstWebService?wsdl) no campo Service definition. Então configure servidor como fizemos anteriormente e clique em finish.

5.3 Isso gerará duas novas classes chamadas FirstWebServiceStub.java e FirstWebServiceCallbackHandler.java. Agora nós podemos criar uma lcasse de teste para o cliente utilizar o nosso web service. Crie uma nova classe chamada TestClient.java e cole o seguinte código.

package com.sencide;
import java.rmi.RemoteException;
import com.sencide.FirstWebServiceStub.AddTwoNumbers;
import com.sencide.FirstWebServiceStub.AddTwoNumbersResponse;
public class TestClient {
 public static void main(String[] args) throws RemoteException {
  
  FirstWebServiceStub stub = new FirstWebServiceStub();
  AddTwoNumbers atn = new AddTwoNumbers();
  atn.setFirstNumber(5);
  atn.setSecondNumber(7);
  AddTwoNumbersResponse res = stub.addTwoNumbers(atn);
  System.out.println(res.get_return());
  
 }
}

Agora nós podemos rodar o código acima como java application e vamos ter a saída “12” desde que adicionarmos “7” e “5”.

Faça o download do projeto do Eclipse com o Exemplo acima clicando aqui!!! (Senha : sara)

Fonte: Sencide – Saranga Rathnayaka