É possível usar o Web Services Invocation Framework (WSIF) para ligar uma referência a um serviço da Web e, em
seguida, consultar a referência usando JNDI.
Sobre Esta Tarefa
Você acessa um serviço da Web por meio de informações fornecidas no documento Web Services Description
Language (WSDL) para o serviço.
Se você não souber onde localizar o documento WSDL para o serviço, mas você sabe que foi registrado em um UDDI Registry, então, consulte-o no registro. Os programas Java™ acessam objetos e recursos Java de uma maneira semelhante, mas utilizando uma interface
JNDI.
Os fragmentos de código nas etapas a seguir mostram como fazê-lo, usando o WSIF, você pode ligar uma
referência a um serviço da Web e, em seguida, consultar a referência usando a JNDI.
- Especifique os valores de argumentos para o serviço da Web.
O serviço da Web é representado no WSIF por uma instância da classe org.apache.wsif.naming.WSIFServiceRef. Esse objeto Referenceable simples possui o seguinte construtor:
public WSIFServiceRef(
String WSDL,
String sNS,
String sName,
String ptNS,
String ptName)
{
[...]
}
Nesse exemplo:
- WSDL é a localização do arquivo WSDL que contém a definição do serviço.
- sNS é o espaço de nomes completo para a definição de serviço (é possível especificar null se apenas um serviço for definido no arquivo WSDL).
- sName é o nome local para a definição de serviço (é possível especificar null se apenas um serviço for definido no arquivo WSDL).
- ptNS é o espaço de nomes completo para o tipo de porta no serviço que você deseja utilizar
(é possível especificar null se apenas um tipo de porta estiver disponível para o serviço).
- ptName é o nome local para o tipo de porta (é possível especificar null se apenas um tipo de porta estiver disponível para o serviço).
Por exemplo, se o arquivo WSDL para o serviço da Web estiver disponível a partir do endereço da Web
http://myServer/WSDL/Example.WSDL e contiver as seguintes definições de tipo de porta e serviço:
<definitions targetNamespace="http://hostname/namespace/example"
xmlns:abc="http://hostname/namespace/abc"
[...]
<portType name="ExamplePT">
<operation name="exampleOp">
<input name="exampleInput" message="tns:ExampleInputMsg"/>
</operation>
</portType>
[...]
<service name="abc:ExampleService">
[...]
</service>
[...]
</definitions>
É possível especificar os seguintes valores de argumentos para a classe WSIFServiceRef:
- WSDL é http://myServer/WSDL/Example.WSDL
- sNS é http://hostname/namespace/abc
- sName é ExampleService
- ptNS é http://hostname/namespace/example
- ptName é ExamplePT
- Ligue o serviço usando a JNDI.
Para ligar a
referência de serviço no diretório de nomenclatura usando a JNDI, é possível usar
a classe com.ibm.websphere.naming.JndiHelper no WebSphere Application
Server:
[...]
import com.ibm.websphere.naming.JndiHelper;
import org.apache.wsif.naming.*;
[...]
try {
Context startingContext = new InitialContext();
WSIFServiceRef ref = new WSIFServiceRef("http://myServer/WSDL/Example.WSDL",
"http://hostname/namespace/abc"
"ExampleService",
"http://hostname/namespace/example",
"ExamplePT");
JndiHelper.recursiveRebind(startingContext,
"myContext/mySubContext/myServiceRef", ref);
}
catch (NamingException e) {
// Tratar erros.
}
[...]
- Consulte o serviço usando a JNDI.
O seguinte
fragmento de código mostra a consulta de um serviço usando a JNDI:
[...]
try {
[...]
InitialContext ic = new InitialContext();
WSIFService myService =
(WSIFService) ic.lookup("myContext/mySubContext/myServiceRef");
[...]
}
catch (NamingException e) {
// Tratar erros.
}
[...]