A diferença entre este exemplo e o artigo de referência é:
1) deploy.wsdd é definido com mais detalhes (a interface é definida para o lado do servidor: ICalculate):
Copie o código do código da seguinte forma:
<implantação xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<nome do serviço="Calcular" provedor="java:RPC" estilo="rpc" use="literal">
<nome do parâmetro = "wsdlTargetNamespace" valor = "http://web.webservice.CalculateService.org" />
<parâmetro name="wsdlServiceElement" value="Calcular" />
<parâmetro name="wsdlServicePort" value="CalculateService" />
<nome do parâmetro = "wsdlPortType" valor = "ICalculate" />
<parâmetro name="className" value="org.calculateservice.service.CalculateImp" />
<parâmetro name="typeMappingVersion" valor="1.2" />
<nome do parâmetro = "allowedMethods" valor = "adicionar sub" />
<nome do parâmetro="escopo" valor="Solicitação" />
<nome da operação="adicionar" qname="operNS:add"
xmlns:operNS="http://web.webservice.CalculateService.org"
returnQName="addReturn" returnType="rtns:int" xmlns:rtns="http://www.w3.org/2001/XMLSchema"
sabãoAction="">
<parâmetro qname="x" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
<parâmetro qname="y" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</operação>
<nome da operação="sub" qname="operNS:sub"
xmlns:operNS="http://web.webservice.CalculateService.org"
returnQName="subReturn" returnType="rtns:int" xmlns:rtns="http://www.w3.org/2001/XMLSchema"
sabãoAction="">
<parâmetro qname="x" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
<parâmetro qname="y" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</operação>
</serviço>
</implantação>
2) AxisServlet customizado: org.calculateservice.core.AxisServlet (compatível com .NET e removendo a verificação SOAPACTION);
O código detalhado não está postado aqui. Se você estiver interessado, você mesmo pode baixar o código de exemplo completo;
3) O método de chamada é usar uma classe local para chamar (parece haver três maneiras de chamar WS em Java. Pessoalmente, acho que usar uma classe proxy local para chamar é o mais razoável e legível):
Copie o código do código da seguinte forma:
public static void main(String[] args) lança ServiceException, RemoteException {
Calcular calcular = new CalculaLocator();
resultado int = calcular.getCalculateService().add(1, 2);
System.out.println("[%1 + 2 = " + resultado + "%]");
}
Principais etapas para publicar/chamar WS: 1) Copie o diretório axis no webapp no pacote de instalação axis1.4 no recurso baixado para o diretório webapp no tomcat;
2) Escreva o código de implementação do servidor WS;
3) Escreva o arquivo de implantação deploy.wsdd no diretório WEB-INF;
4) Escreva: script generate-server-config.bat, depois gere: server-config.wsdd e publique o webservice;
5) Escreva: script wsdl2java.bat para gerar o código do cliente de chamada local;
6) Escreva o código de teste para chamar o WS;
Diagrama de estrutura de código:
cliente: Use WSDL2Java para gerar código de cliente local baseado em wsdl;
core: AxisServlet customizado, compatível com .NET e remove a verificação SOAPACTION;
serviço: código de implementação do servidor WS (um cálculo simples de adição e subtração é usado como exemplo aqui);
teste: Chame o servidor com base na classe cliente gerada (o endereço do servidor do código gerado é localhost. Caso precise alterar este endereço para configuração, basta modificar a atribuição da variável CalculaService_address na classe CalculaLocator);
Clique para baixar o exemplo completo
O recurso contém código completo de amostra e arquivos de instalação do axis1.4