Customizando Padrões da URL no Arquivo web.xml para Aplicativos JAX-WS
O arquivo web.xml contém informações sobre a estrutura e dependências externas de componentes da Web no módulo e descreve como os componentes são usados no tempo de execução. Para os aplicativos JAX-WS (Java™ API for XML-Based Web Services), você pode customizar o padrão de URL no arquivo web.xml.
Antes de Iniciar
Sobre Esta Tarefa
- Um arquivo WEB-INF/web.xml que descreve as informações de configuração e implementação para os componentes da Web que compõem um aplicativo da Web.
- Classes anotadas que implementam os serviços da Web contidos no módulo do aplicativo incluindo a classe de implementação do terminal em serviço.
- Classes JAXB
- (Opcional) Documentos Web Services Description Language (WSDL) que descrevem os serviços da Web contidos no módulo do aplicativo.
- (Opcional) Arquivo de esquema XML
- (Opcional) Classes do utilitário
- (Opcional) Clientes de serviço da Web
O padrão de URL é definido pelo atributo @WebService.serviceName que está contido na sua classe de implementação de serviço da Web. Quando o arquivo WSDL que está associado à classe de implementação de serviço contém uma única definição de porta, você pode optar por usar o padrão de URL ou customizar o padrão de URL no arquivo web.xml. Quando o arquivo WSDL que está associado à classe de implementação de serviço contém várias definições de porta na mesma definição de serviço, padrões de URL customizados são requeridos. Se você usar o padrão de URL quando a classe de implementação de serviço contiver várias definições de porta, várias classes de implementação de serviço serão mapeadas para o mesmo padrão de URL que resulta em uma condição de erro. Você deve editar o arquivo web.xml e customizar os padrões de URL para cada definição de serviço. Cada porta mapeia para uma classe de implementação de serviço da Web e para seu próprio padrão de URL customizado. Customizando o padrão de URL no arquivo web.xml, você corrige as definições de padrão de URL em conflito.
Se seu aplicativo JAX-WS estiver compactado em um arquivo JAR (Java Archive) do EJB (Enterprise JavaBeans) em um arquivo EAR (Enterprise Archive), você poderá customizar os padrões de URL utilizando o comando endptEnabler.
Procedimento
- Determine se os padrões de URL customizados são necessários ou desejados. Padrões de URL customizados apenas são necessários quando o arquivo WSDL para o seu serviço da Web JAX-WS contém diversas definições de porta dentro de um único serviço. Caso contrário, você pode definir opcionalmente os padrões de URL customizados.
- Para customizar o padrão de URL para uma classe de implementação de serviço, edite o arquivo web.xml e forneça um <servlet> e uma entrada <servlet-mapping> correspondente para cada classe de implementação de serviço da Web JAX-WS para a qual um padrão de URL customizado é desejado. Você deve definir o valor <url-pattern> na entrada <servlet-mapping>.
Resultados
Definição de Porta WSDL Exclusiva em uma Classe de Implementação de Serviço
O exemplo a seguir ilustra o padrão de URL e como customizar o padrão de URL quando o arquivo WSDL associado à classe de implementação de serviço tiver uma única definição de porta.
Esse é um extrato de uma classe de implementação de serviço da Web de amostra.
package com.ibm.test;
@WebService(serviceName="EchoService", portName="SOAP11EchoServicePort")
public class EchoServiceSOAP11{
Esse é um extrato de um arquivo WSDL associado com a classe de implementação de serviço da Web EchoServiceSOAP11:
<wsdl:service name="EchoService">
<wsdl:port name="SOAP11EchoServicePort" tns:binding="..." >
...
</wsdl:port>
</wsdl:service>
Como prescrito pelo JSR-109, o padrão de URL neste exemplo é construído usando o atributo @WebService.serviceName e o padrão de URL é /EchoService.Para, opcionalmente, customizar o padrão de URL neste exemplo, edite o arquivo web.xml e forneça uma entrada url-pattern. Neste exemplo, o padrão de URL customizado é agora /EchoServiceSOAP11.
O seguinte fragmento foi retirado de um arquivo web.xml de amostra que demonstra a configuração de um servlet:
<servlet id="...">
<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
<servlet-class>com.ibm.test.EchoServiceSOAP11</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
<url-pattern>/EchoServiceSOAP11</url-pattern> ----> Definindo o padrão de URL e o apontando para a classe de implementação de serviço.
</servlet-mapping>
O exemplo a seguir ilustra as customizações do padrão de URL requerido quando o arquivo WSDL associado à classe de implementação de serviço tem várias definições de porta.
O extrato a seguir é de uma classe de implementação de serviço da Web de amostra:
package com.ibm.test;
@WebService(serviceName="EchoService", portName="SOAP11EchoServicePort")
public class EchoServiceSOAP11{
...
}
package com.ibm.test;
@WebService(serviceName="EchoService", portName="SOAP12EchoServicePort")
public class EchoServiceSOAP12{
...
}
O extrato a seguir é de um arquivo WSDL associado com a classe de implementação de serviço da Web EchoServiceSOAP11. Cada porta no arquivo WSDL mapeia para uma portName na classe de implementação de serviço da Web.
<wsdl:service name="EchoService">
<wsdl:port name="SOAP11EchoServicePort" tns:binding="..." >
...
</wsdl:port>
<wsdl:port name="SOAP12EchoServicePort" tns:binding="..." >
...
</wsdl:port>
</wsdl:service>
Neste cenário, porque há várias definições de porta dentro do arquivo WSDL, você deve customizar o padrão de URL editando o arquivo web.xml. Especifique padrão de URL customizados para cada serviço.
O seguinte fragmento foi retirado de um arquivo web.xml de amostra que demonstra a configuração de um servlet:
<servlet id="...">
<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
<servlet-class>com.ibm.test.EchoServiceSOAP11</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
<url-pattern>/EchoServiceSOAP11</url-pattern>
</servlet-mapping>
<servlet id="...">
<servlet-name>com.ibm.test.EchoServiceSOAP12</servlet-name>
<servlet-class>com.ibm.test.EchoServiceSOAP12</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>com.ibm.test.EchoServiceSOAP12</servlet-name>
<url-pattern>/EchoServiceSOAP12</url-pattern>
</servlet-mapping>