| :index-group: Webservice |
| :jbake-type: page |
| :jbake-status: published |
| = Webservice JAX-WS - Configuração de Recursos |
| |
| 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 (http://tomee.apache.org/details-on-openejb-jar.html[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: |
| |
| [source,xml] |
| ---- |
| |
| <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: |
| |
| [source,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 https://github.com/apache/tomee/blob/master/examples/webservice-ws-with-resources-config/src/main/java/org/superbiz/ws/security/PasswordCallbackHandler.java[aqui]: |
| |
| |
| === Executando os testes |
| |
| Exemplo de projeto completo pode ser encontrado https://github.com/apache/tomee/tree/master/examples/webservice-ws-with-resources-config[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 |