| :index-group: Unrevised |
| :jbake-type: page |
| :jbake-status: status=published |
| = Alterar JAXWS URL |
| |
| Para alterar a URI de um web service, uma solução é usar o arquivo `openejb-jar.xml`. |
| |
| Neste exemplo temos um web service através da classe `Rot13`: |
| |
| .... |
| package org.superbiz.jaxws; |
| |
| import javax.ejb.Lock; |
| import javax.ejb.LockType; |
| import javax.ejb.Singleton; |
| import javax.jws.WebService; |
| |
| @Lock(LockType.READ) |
| @Singleton |
| @WebService |
| public class Rot13 { |
| public String rot13(final String in) { |
| final StringBuilder builder = new StringBuilder(in.length()); |
| for (int b : in.toCharArray()) { |
| int cap = b & 32; |
| b &= ~cap; |
| if (Character.isUpperCase(b)) { |
| b = (b - 'A' + 13) % 26 + 'A'; |
| } else { |
| b = cap; |
| } |
| b |= cap; |
| builder.append((char) b); |
| } |
| return builder.toString(); |
| } |
| } |
| .... |
| |
| Decidimos fazer o deploy na url `/tool/rot13`. |
| |
| Para fazer isso, primeiro temos que definir a rota no arquivo `openejb-jar.xml`: |
| |
| .... |
| <?xml version="1.0" encoding="UTF-8"?> |
| <openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"> |
| <enterprise-beans> |
| <session> |
| <ejb-name>Rot13</ejb-name> |
| <web-service-address>/tool/rot13</web-service-address> |
| </session> |
| </enterprise-beans> |
| </openejb-jar> |
| .... |
| |
| Isto não é o bastante, por que, por padrão o TomEE faz o deploy do web service |
| com um subcontexto chamado `webservices`. Para evitar isto simplesmente informe |
| a propriedade `tomee.jaxws.subcontext` para `/` (feito no arquivo `arquillian.xml` |
| para nosso teste). |
| |
| Agora fizemos o deploy do nosso web service `Rot13` como esperado no contexto |
| `/tool/rot13` e vamos verificar isto com o Arquillian e o TomEE embedded: |
| |
| .... |
| package org.superbiz.jaxws; |
| |
| import org.apache.ziplock.IO; |
| import org.jboss.arquillian.container.test.api.Deployment; |
| import org.jboss.arquillian.junit.Arquillian; |
| import org.jboss.arquillian.test.api.ArquillianResource; |
| import org.jboss.shrinkwrap.api.ArchivePaths; |
| import org.jboss.shrinkwrap.api.ShrinkWrap; |
| import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset; |
| import org.jboss.shrinkwrap.api.spec.WebArchive; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import java.net.URL; |
| |
| import static org.junit.Assert.assertThat; |
| import static org.junit.internal.matchers.StringContains.containsString; |
| |
| @RunWith(Arquillian.class) |
| public class Rot13Test { |
| @ArquillianResource |
| private URL url; |
| |
| @Deployment(testable = false) |
| public static WebArchive war() { |
| return ShrinkWrap.create(WebArchive.class) |
| .addClass(Rot13.class) |
| .addAsWebInfResource(new ClassLoaderAsset("META-INF/openejb-jar.xml"), ArchivePaths.create("openejb-jar.xml")); |
| } |
| |
| @Test |
| public void checkWSDLIsDeployedWhereItIsConfigured() throws Exception { |
| final String wsdl = IO.slurp(new URL(url.toExternalForm() + "tool/rot13?wsdl")); |
| assertThat(wsdl, containsString("Rot13")); |
| } |
| } |
| .... |