Preloader image

TomEE conta com o Apache CXF para JAX-RS (RESTful Services) e JAX-WS (Web Services). Este é um exemplo de como desenvolver EJB webservices graças a implementação CXF.

openejb-jar.xml Configuração

Você pode usar (openejb-jar.xml) para configurar seu webservice.

CXF API é reutilizável mas além disso você pode configurar os interceptadores através do openejb-jar.xml(localizados na WEB-INF). Como um rápido lembrete, a configuração no openejb-jar.xml, você pode utilizar uma configuração parecida a esta, com o seu próximo EJB:

<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
  <ejb-deployment ejb-name="CalculatorBean"> <!-- configurar os valores do bean, no resources.xml -->
    <properties>
      cxf.jaxws.in-interceptors = wss4j
    </properties>
  </ejb-deployment>
</openejb-jar>

Para um webservice Pojo é da mesma forma, mas usando o pojo-deployment em vez do ejb-deployment.

Então uma vez que fez sua seleção de prefixo, e conhece onde é para escrever a configuração, basta utilizar as seguintes entradas:

  • properties: propriedades da fábrica servidora

  • features: recursos CXF

  • in-interceptors: interceptadores de entrada do CXF

  • out-interceptors: interceptadores de saída do CXF

  • in-fault-interceptors: interceptadores de entrada do CXF para tratamento de erros

  • out-fault-interceptors: interceptadores de saída do CXF para tratamento de erros

  • databinding: servidor de vinculação de dados

  • providers (somente para endpoint JAX-RS): lista de provedores JAX-RS

  • skip-provider-scanning (somente para JAX-RS): utilizar ou não um provedor de varredura (por padrão true)

Para características e interceptadores, a regra é a mesma: lista de valores separados por vírgula. Cada valor da lista, é um nome de classe qualificado ou um id de serviço, é um ou o outro, no resources.xml.

Exemplo para JAX-WS

Para configurar o WSS4J no EJB CalculatorBean para adicionar uma instância no openejb-jar.xml:

<resources>
  <!-- os interceptadores -->
  <Service id="wss4j1" class-name="org.apache.openejb.server.cxf.config.WSS4JInInterceptorFactory" factory-name="create">
    action = UsernameToken
    passwordType = PasswordText
    passwordCallbackClass = org.superbiz.ws.security.PasswordCallbackHandler
  </Service>
</resources>

passwordCallbackClass

passwordCallbackClass é uma propriedade do WSS4JInInterceptorFactory e seu valor é a classe PasswordCallbackHandler.

PasswordCallbackHandler utiliza org.apache.wss4j.common.ext.WSPasswordCallback para prover senhas no mecanismo de callback.

Exemplo

Exemplo completo pode ser encontrado aqui:

Executando os testes

Exemplo de projeto completo pode ser encontrado aqui. Este é um projeto maven, e todos os testes pode ser executados rodando o comando mvn clean test.

mvn clean test
[INFO] Resultados:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
== APIs Used

- link:../../../tomee-9.0/javadoc/org/apache/openejb/OpenEjbContainer.html[org.apache.openejb.OpenEjbContainer]
- link:../../../tomee-9.0/javadoc/org/apache/openejb/loader/SystemInstance.html[org.apache.openejb.loader.SystemInstance]
- link:../../../jakartaee-10.0/javadoc/jakarta/ejb/Singleton.html[jakarta.ejb.Singleton]
- link:../../../jakartaee-10.0/javadoc/jakarta/ejb/embeddable/EJBContainer.html[jakarta.ejb.embeddable.EJBContainer]
- link:../../../jakartaee-10.0/javadoc/jakarta/jws/WebService.html[jakarta.jws.WebService]
- link:../../../jakartaee-10.0/javadoc/jakarta/xml/ws/Service.html[jakarta.xml.ws.Service]
- link:../../../jakartaee-10.0/javadoc/jakarta/xml/ws/soap/SOAPFaultException.html[jakarta.xml.ws.soap.SOAPFaultException]