É possível migrar serviços da Web que foram desenvolvidos usando o Apache SOAP para serviços da Web Java™ API for XML-based RPC (JAX-RPC) que são desenvolvidos com base nos Serviços da Web para a especificaçãoJava Platform, Enterprise Edition (Java EE).
Antes de Iniciar
Se você usou serviços da Web baseados em Apache SOAP e agora deseja desenvolver e implementar serviços da Web que são baseados em Java, você precisa migrar aplicativos do cliente desenvolvidos com todas as versões do 4.0, e as versões do 5.0 anteriores à 5.0.2.
Sobre Esta Tarefa
O SOAP-Security (assinatura digital XML) com base na implementação Apache
SOAP foi removido. Em vez de usar a Segurança SOAP, migre e reconfigure o seu aplicativo para a implementação JSR-109 dos serviços da Web.
Para migrar estes aplicativos clientes de acordo com os padrões
Java:
Procedimento
- Planeje sua estratégia de migração. É possível portar um cliente Apache SOAP para um cliente de serviços da Web JAX-RPC de uma de duas maneiras:
Como JAX-RPC não especifica uma estrutura para serializadores escritos pelo usuário,
JAX-RPC não suporta o uso de serializadores customizados.
Se o seu aplicativo não puder
ficar em conformidade com o mapeamento padrão entre Java, WSDL e a tecnologia XML
suportada por WebSphere Application Server, não tente migrar o aplicativo. O restante deste tópico supõe que você tenha decidido usar as APIs DII
(Dynamic Invocation Interface) JAX-RPC.
- Revise a Amostra GetQuote. Uma migração de serviços da Web de Amostra está disponível na seção
Amostras do Centro de Informações.
Essa amostra está localizada no arquivo GetQuote.java,
originalmente gravado para os usuários do Apache SOAP e inclui uma explicação sobre as mudanças
necessárias para migrar para as interfaces DII JAX-RPC.
Para saber mais, consulte a seção Amostras do Centro de Informações.
- Converta o aplicativo cliente de Apache SOAP para DII JAX-RPC As estruturas da API Apache SOAP API e da API DII JAX-RPC são semelhantes. É possível instanciar e configurar um objeto Call, configurar os parâmetros, chamar a operação e processar o resultado em ambas. É possível criar uma instância genérica de um objeto Service com o seguinte
comando:
javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
no JAX-RPC.- Crie o objeto Call. Uma instância do objeto Call é
criada com o seguinte código:
org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
no Apache SOAP.Uma instância do objeto Call é criada por
java.xml.rpc.Call call = service.createCall();
no JAX-RPC.
- Defina os URIs (Identificadores Uniformes de Recursos) do terminal. O URI de destino para a operação é transmitido como um parâmetro para
call.invoke: call.invoke("http://...", "");
no Apache SOAP. O método setTargetEndpointAddress é utilizado como um parâmetro para
call.setTargetEndpointAddress("http://...");
no JAX-RPC.
O Apache
SOAP tem um método setTargetObjectURI no objeto Call que contém informações de roteamento
para o pedido.
JAX-RPC não tem um método equivalente. As informações em
targetObjectURI são incluídas no URI do targetEndpoint para JAX-RPC.
- Defina o nome da operação. O nome da operação é configurado
no objeto Call por
call.setMethodName("opName");
no Apache SOAP. O método setOperationName, que aceita um parâmetro
QName em vez de um
String, é
utilizado em JAX-RPC conforme ilustrado no seguinte
exemplo:
call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
- Defina o estilo de codificação. O estilo de codificação é configurado
no objeto Call por
call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
no Apache SOAP.O estilo de codificação é definido por uma propriedade do objeto Call
call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.
xmlsoap.org/soap/encoding/");
no JAX-RPC.
- Declare os parâmetros e defina os valores dos parâmetros. Os tipos
e valores dos parâmetros Apache SOAP são descritos por instâncias de parâmetros, que
são coletadas em um vetor e definidas no objeto Call antes da chamada, por exemplo:
Vector params = new Vector ();
params.addElement (new org.apache.soap.rpc.Parameter(name, type, value, encodingURI));
// repetir para obter parâmetros adicionais...
call.setParams(params);
Para JAX-RPC, o objeto Call é configurado
com nomes e tipos de parâmetros sem fornecer seus valores, por exemplo:
call.addParameter(name, xmlType, mode);
// repetir para obter parâmetros adicionais
call.setReturnType(type);
Onde
- name (type java.lang.String) representa o nome do parâmetro
- xmlType (tipo javax.xml.namespace.QName) é o tipo XML do parâmetro
- mode (type javax.xml.rpc.ParameterMode) o modo do
parâmetro, por exemplo, IN, OUT ou INOUT
- Efetue a chamada. A operação é chamada no objeto
Call por
org.apache.soap.Response resp = call.invoke(endpointURI, "");
no Apache SOAP.Os valores dos parâmetros são coletados em uma matriz e transmitidos
a
call.invoke conforme ilustrado no seguinte exemplo:
Object resp = call.invoke(new Object[] {parm1, parm2,...});
no JAX-RPC.
- Verifique se existem falhas. É possível verificar uma falha de SOAP na chamada, verificando a resposta:
if resp.generatedFault then {
org.apache.soap.Fault f = resp.getFault;
f.getFaultCode();
f.getFaultString();
}
no Apache SOAP.Um erro
java.rmi.RemoteException é exibido
em JAX-RPC se ocorrer uma falha de SOAP na chamada.
try {
... call.invoke(...)
} catch (java.rmi.RemoteException) ...
- Recupere o resultado. Em Apache SOAP, se a chamada
for bem-sucedida e retornar um resultado, ela pode ser recuperada do objeto Response:
Parameter result = resp.getReturnValue(); return result.getValue();
Em
JAX-RPC, o resultado de invoke é o objeto retornado quando nenhuma exceção for exibida:
Object result = call.invoke(...);
...
return result;
Resultados
Você migrou serviços da Web Apache SOAP para serviços da Web JAX-RPC baseado na especificaçãoJava EE.
O que Fazer Depois
Desenvolva um cliente de serviços da Web baseado nos Serviços da Web para a especificação Java EE.
Teste os clientes ativados para serviços da Web para certificar-se de que o processo de migração é bem-sucedido e você pode implementar os serviços da Web em um ambiente Java EE.