1. Exemplo 1 (veja principalmente [2])
1.1. Funções do sistema:
Desenvolva um serviço de calculadora calcula o Service, que inclui operações como Plus, Subtração, Multiplicar e Divisão.
1.2. Preparação antes do desenvolvimento:
Instalar eclipse-jee;
Faça o download da versão mais recente do Axis2, o URL é http://axis.apache.org/axis2/java/core/download.cgi, selecione o pacote ZIP de distribuição binária padrão e descompacte o nome do diretório Axis2-1.4.1. A estrutura do arquivo no diretório é a seguinte:
1.3. Configuração pré-desenvolvimento:
Na barra de menus do Eclipse, Window -> Preferências -> Serviço da Web -> Perferências do Axis2, selecione a localização do pacote de descompressão do Axis2 no local do tempo de execução do Axis2. Depois de configurá -lo, clique em "OK". (Como mostrado na imagem)
1.4. Desenvolva o serviço da web:
(1) Crie um novo projeto Java e nomeie -o "WebServiceTest1"
(2) Crie uma nova classe e nomeie -a como "calcular Service". O código completo é o seguinte:
pacote edu.sjtu.webservice; /*** Operação da calculadora* @author rongxinhua*/classe pública CalculeateService {// adição public float plus (float x, float y) {return x + y; } // subtração public flutuante menos (flutuação x, float y) {return x - y; } // Float público múltiplo multiplique (flutuação x, float y) {return x * y; } // Dividação public Float Divide (flutuação x, float y) {if (y! = 0) {return x /y; } mais retornar -1; }}(3) no projeto "WebServicetest1" novo -> Outros, encontre o "Serviço da Web" em "Serviços da Web";
(4) Próxima etapa (a seguir), na caixa de objeto Web Services que aparece, clique em "Procurar" na implementação do serviço, digite a caixa de objeto Classes Browse e encontre a classe CalculeateService que acabamos de escrever. (Figura abaixo). Clique em "OK" e você retornará à caixa de diálogo Serviço da Web.
(5) Na caixa de diálogo Serviço da Web, ajuste o controle deslizante no tipo de serviço da web na posição de "Start Service" e ajuste o controle deslizante no tipo de cliente na posição de "Test Client".
(6) Existe uma "configuração" no lado direito do diagrama de slider do tipo serviço da web. Clique na opção abaixo para inserir a caixa de objeto de configuração de implantação de serviço e selecione o servidor correspondente (eu uso o TomCat6.0 aqui) e o tempo de execução do serviço da web (selecione Apache Axis2), conforme mostrado na figura abaixo:
(7) Depois de clicar em OK, ele retornará à caixa de diálogo Serviço da Web. Da mesma forma, também há "configuração" no lado direito do controle deslizante no tipo de cliente, e a configuração correspondente deve ser executada. As etapas são as mesmas que acima. Após a conclusão, o próximo -> o próximo está pronto. Entrando na configuração do Java Bean Service de serviço da Web Axis2, selecionamos gerar um serviço padrão.xml, conforme mostrado na figura abaixo:
(8) Quando você chega à caixa de diálogo de inicialização do servidor, há um botão "Start Server" (como mostrado abaixo). Clique nele para iniciar o servidor Tomcat.
(9) Depois de esperar a inicialização, clique em "Avançar -> Avançar", tudo será feito por padrão e, finalmente, clique em Concluir. Finalmente, a interface a seguir aparece: (Web Service Explorer), onde podemos testar nossos Serviços da Web. (Se você abrir com um navegador, use o seguinte endereço: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp?org.eclipse.wst.ws.explorer=3). Como mostrado na figura abaixo:
Nota: Open Web Service Explorer no navegador (às vezes o Web Service Explorer está fechado no Eclipse, que pode ser aberto dessa maneira)
Endereço do primeiro login: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp. Em seguida, selecione a guia Explorer do Serviço da Web no canto superior direito da página da web. Em seguida, digite o endereço WSDL: http: // localhost: 8080/webServiceTest1/Services/CalculateService? WSDL. Este endereço WSDL é o WSDL que acabamos de lançar o serviço. Clique em Go, conforme mostrado na figura a seguir:
Então você pode ver a seguinte interface:
(10) O teste é relativamente simples. Por exemplo, selecionamos uma operação "Plus" (deve ser calculandoVeSoAP11Binding). A figura a seguir aparece. Digite 1 na caixa de entrada de x, digite 2 na caixa de entrada de y e clique em "Go" e o resultado 3.0 será exibido na barra de status. Os testes de outros métodos são semelhantes. Os resultados são mostrados na figura acima.
1.5. O cliente do CalculeateService liga para o programa
Definimos os métodos de adição, subtração, multiplicação e divisão e publicamos esses métodos como serviços. Agora, tudo o que precisamos fazer é chamar esses serviços. O programa de chamada do cliente, conforme mostrado no seguinte código: CalculetateServiceTest.java
pacote edu.sjtu.webservice.test; importar javax.xml.namespace.qname; importar org.apache.axis2.axisFault; importar org.apache.axis2.addressing.endpointreference; importar org.apache.axis2.client.options; importar org.apache.axis2.rpc.client.rpcserviceclient; classe pública CalculetateserviceTest { / ** * @param args * @throws axisfeult * / public static void main (string [] args) lança axisfeult {// tlo-generated método stub // chamado WebService usando o método rpc rpcServiceclient; Opções opções = serviceClient.getOptions (); // Especifique o URL para chamar o WebService endPointference Targetepr = new EndPointreference ("http: // localhost: 8080/webServiceTest1/Services/CalculateService"); options.setTo (Targetepr); // Especifique o método e o espaço para nome do arquivo WSDL no computador a ser chamado: edu.sjtu.webService. Qname opaddentry = novo qname ("http://webservie.sjtu.edu", "plus"); // addqname opaddentryminus = new QNAME ("http://webService.sjtu.edu", "minúsculo") // Qname ("http://webservice.sjtu.edu", "multiply"); // multiplique o QNAME OPADDENTRYDIVIDE = new Qname ("http://webService.sjtu.edu," divide "// Divide // especifique os parâmetros dos parâmetros dos valores dos parâmetros de Methodu.edu," Divide "); opaddentryargs = novo objeto [] {1,2}; // Especifique o tipo de dados do valor de retorno das classes de métodos de plus [] = nova classe [] {float.class}; // Ligue para o método Plus e produz o valor de retorno do Method System.out.println (ServiceClient.invokeBlocking (Opaddentry, OpaddentryArgs, Classes) [0]); System.out.println (serviceClient.invokeBlocking (opaddentryminus, opaddentryargs, classes) [0]); System.out.println (serviceClient.invokeBlocking (opaddentrymultiply, opaddentryargs, classes) [0]); System.out.println (serviceClient.invokeBlockbock (opaddentrydivide, opaddentryargs, classes) [0]); }}Resultados em execução:
3.0
-1.0
2.0
0,5
2. Exemplo
2.Helloservice
(1) Primeiro defina o método de serviço, o código é o seguinte:
pacote edu.sjtu.webservice; classe pública Helloservice {public string dizhellonew () {return "hello"; } public string dizHelloToperSonnew (nome da string) {if (name == null) {name = "NONE"; } retornar "Hello", + nome; } public void updateTata (dados da string) {System.out.println (dados + "atualizado."); }} (2) Consulte o Exemplo 1 para publicar este método como um serviço.
(3) Escreva o código do cliente para chamar WebService (referência principal [5])
A maior diferença entre este exemplo e outros exemplos é aqui. Outros exemplos geralmente precisam gerar um stub de cliente com base no WSDL de serviço agora e, em seguida, ligar para o serviço através do stub. Este método parece relativamente único. O cliente deve precisar de um stub Stub para acessar o serviço, o que é muito injusto. O cliente neste exemplo não usa o método Stub, mas implementa um método de chamada geral e não requer nenhum stub do cliente para acessar o serviço. Você só precisa especificar o endereço da web, o nome da operação, o parâmetro e o tipo de retorno da função. O código se parece com o seguinte:
Helloservicetest2.javapackage edu.sjtu.webService.test; importar javax.xml.namespace.qname; importar org.apache.axis2.axisFault; importar org.apache.axis2.addressing.endpointreference; importar org.apache.axis2.client.options; importar org.apache.axis2.rpc.client.rpcserviceclient; classe pública heloservicetest2 {private rpcServiceclient ServiceClient; opções privadas opções; Targetepr privado EndPointference; public helloservicetest2 (endpoint de string) lança axisfault {serviceClient = new rpcServiceclient (); opções = serviceClient.getOptions (); Targetepr = new EndPointference (endpoint); options.setTo (Targetepr); } public Object [] InvokeOP (String TargetNamesPace, String opname, Object [] Opargs, classe <?> [] OPRETURNTYPE) lança Axisfault, ClassNotFoundException {// Defina o nome da operação qname Opqname = new Qname (TargetNamesPace, opName); // Defina o valor de retorno // classe <?> [] OPRETURN = nova classe [] {OPRETURNTYPE}; // Os parâmetros em que a operação precisa ser passada já são fornecidos nos parâmetros. Aqui, chamamos diretamente o retorno serviceClient.invokeBlocking (opqname, Opargs, OPRONTRYTYPE); } /** * @param args * @throws AxisFault * @throws ClassNotFoundException */ public static void main(String[] args) throws AxisFault, ClassNotFoundException { // TODO Auto-generated method stub final String endPointReference = "http://localhost:8080/WebServiceTest1/services/HelloService"; Final String TargetNamespace = "http://webservice.sjtu.edu"; HELLOSERVICETEst2 Client = new HelloserviceTest2 (EndPoIntReference); String opname = "SayHellotoperSonnew"; Objeto [] Opargs = novo objeto [] {"meus amigos"}; Classe <?> [] OPRETURNTYPE = nova classe [] {String []. Classe}; Objeto [] Response = client.invokeop (TargetNamesPace, OpName, Opargs, OPRESTURNTYPE); System.out.println ((((string []) resposta [0]) [0]); }}Execute o programa e clique em Executar o aplicativo AS-> Java. Você pode ver que a saída da porta do console é: Olá, meus amigos, indicando que a chamada do cliente é bem -sucedida. A maior diferença e vantagem deste exemplo é refletida no método de chamada do cliente ou, em outras palavras, a maneira de iniciar chamadas de serviço. Embora haja um pouco mais de código do que o stub Stub Stub do cliente, esse método é unificado e não requer a produção de código Stub Stub, que resolve o problema que o cliente tem muitas classes. Se o leitor encapsula ainda esses códigos, acho que o método de chamada é simples, basta passar parâmetros relevantes, o que ilustra melhor as vantagens das chamadas de serviço. Além disso, esse método é mais simples e claro, e você pode dizer o significado específico de relance. Não há necessidade de fazer alguns mecanismos de classe de stub.
(4) Reescreva o código do serviço de chamada de cliente
(3) O código do aplicativo do cliente mencionado a seguir é um pouco complicado de escrever. O cliente acima que chama do programa de serviço é reescrito, o que é muito mais simples. O código é o seguinte:
Helloservicetest.javaimport javax.xml.namespace.qname; importar org.apache.axis2.axisFault; importar org.apache.axis2.addressing.endpointreference; importar org.apache.axis2.client.options; importar org.apache.axis2.rpc.client.rpcserviceclient; classe pública heloservicetest {public static void main (string args []) lança axisfault {// chama Web Service rpcServiceclient usando RPC ServiceClient = novo rpcServiceclient (); Opções opções = serviceClient.getOptions (); // Especifique o URL para chamar Web Service endPointference Targetepr = new EndPointreference ("http: // localhost: 8080/webServiceTest1/Services/Helloservice"); options.setTo (Targetepr); // Especifique o método SayHelloToperson a ser chamado e o espaço para nome do arquivo wsdl qname opaddentry = new Qname ("http://webservice.sjtu.edu", "Sayhellotopersonw"); // Especifique o valor do parâmetro do objeto SayHelloToperson Method [] opaddentryargs = new Object [] {"Xuwei"}; // Especifique o objeto de classe do tipo de dados que o método SayHellotoperson retorna a classe Value [] Classes = nova classe [] {String.class}; // Ligue para o método SayHelloToperson e produz o valor de retorno do Method System.out.println (ServiceClient.invokeBlocking (OpadDentry, OpaddentryArgs, Classes) [0]); }}Através do conteúdo acima, apresentarei um exemplo de desenvolvimento simples de Eclipse+Web Service e espero que seja útil para todos!