Pergunta

É possível com Axis2 e Eclipse para gerar um cliente de serviço Web e tê-lo usar tipos de Java que você já tem em pacotes em vez de criar é próprios tipos. Razão de ser, claro, se eu tenho tipo A já criou e cria seu próprio tipo A não posso apenas atribuir variável do tipo à variável do tipo B.

O wsdl está sendo gerado a partir de um serviço Web implantado em um servidor de aplicativos. Se não for possível gerar-lo de que seria possível gerar um cliente a partir dos arquivos Java já existentes.

Foi útil?

Solução

Se você realmente quiser reutilizar classes existentes, você pode chamar a API Axis2 diretamente sem gerar um cliente usando wsdl2java. Abaixo está um código relativamente simples de chamar um serviço web. Você só precisa preencher o terminal de serviço da web, método QName, retorno esperado classe (s), e os argumentos para o serviço. Você pode reutilizar suas classes existentes como os valores de retorno ou argumentos.

Se o seu serviço web é muito complicado, então você pode achar que você tem que ir mais fundo na API para obter esta abordagem ao trabalho.

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);

Outras dicas

Você está gerando o cliente de serviço Web a partir do WSDL, correto?

A única coisa que a ferramenta wsdl2java conhece é a informação no WSDL, por isso não vai saber sobre quaisquer tipos que você já criou.

Se você pode obter as informações de tipo para o wsdl que você pode fazê-lo funcionar, embora eu nunca tentei.

Se você quiser uma maneira fácil de copiar do Tipo A para Tipo B, em seguida, você pode tentar BeanUtils.copyProperties , enquanto os setters e getters de tipo a e tipo B jogo.

praticamente projectos maioria java webservices passar por isso. Eu não sei se # mundo .NET / C tem uma solução mais elegante.

Não faz sentido, como Mike mencionado, a BeanUtils.copyProperties de uso.

BR,
~ A

Se você usar o Eclipse como seu IDE, que é waht que você precisa: http: //www.eclipse. org / webtools / . Ele faz além de outras coisas exatamente o que você deseja.

Você pode usar diretamente classe ServiceClient ao serviço web chamada, que fornece chamada usando somente e resposta retorna XML XML. Para diferentes métodos de serviço web, você tem que converter a resposta XML para algum java POJO para usá-lo. Apenas Response manipulação precisa ser feito no seu fim. que você pode fazer como de XML para Map etc ...

Assim você não vai precisar de quaisquer outras classes stub para chamar qualquer serviço web, precisa apenas XML resposta alça. Você pode converter XML para POJO usando Castor ou JAXB libs.

Esta é a maneira que você não precisa modificar seu cliente de cada vez para diff. serviços web. Você pode desenvolver como fornecer um manipulador de resposta ao cliente externamente. De modo que para cada serviço web diferente, você terá diff. resposta da classe manipulador, que é a implementação de você interface.

//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
    public Object getMeResp(Object respData);
}


//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ..

        return repHandler.getMeResp(xmlData);
    }
}

referência:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation -on-the-client-Side.htm

http: // www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

obrigado.

www.techlads.com

No caso deste post ainda é de alguma utilidade para alguém que eu ler o guia clientes geradoras eixo2: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

Parece que o plug-in Axis2 Eclipse está configurado para geração de código chamada ADB no modo integrado (ver http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ), criando, assim, classes internas no stub de serviço web. Eu não sei se alterar o modo de geração em modo expandido (gerar classes de dados para fora da classe stub) é possível, mas você pode fazê-lo comandar linha usando WSDL2Java:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

A opção -u diz o gerador de código ADB para criar classes de dados como classes separadas e classes não internos no topo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top