Migrando Serviços da Web Apache SOAP para Serviços da Web JAX-RPC Baseado em Padrões Java EE

É 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

  1. 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:
    • Se você tiver, ou puder criar, um documento Web Services Description Language (WSDL) para o serviço, considere usar a ferramenta de comando WSDL2Java para gerar ligações para o serviço da Web. É mais trabalhoso adaptar um cliente Apache SOAP para usar as ligações JAX-RPC geradas, mas o código de cliente resultante é mais robusto e fácil de manter.

      Para seguir esse caminho, consulte o artigo sobre desenvolvimento de um cliente de serviços da Web no centro de informações.

    • Se você não tiver um documento WSDL para o serviço, não esperar que o serviço mude, e quiser portar o cliente Apache SOAP com um mínimo de trabalho, você pode converter o código para usar a DII (Dynamic Invocation Interface) JAX-RPC, que é semelhante às APIs Apache SOAP. As APIs DII não utilizam ligações WSDL nem geradas.
    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.
  2. 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.
  3. 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.
    1. 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.
    2. 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.

    3. 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"));
    4. 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.
    5. 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
    6. 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.
    7. 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) ...
    8. 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.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_migratewbs
Nome do arquivo: twbs_migratewbs.html