```python import xml.etree.ElementTree as ET alunos = { 101: {"nome": "Ana Souza", "curso": "Sistemas de Informação"}, 102: {"nome": "Bruno Lima", "curso": "Ciência da Computação"}, 103: {"nome": "Carla Mendes", "curso": "Engenharia de Software"} } def criar_requisicao_aluno(id_aluno): return f"""<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetStudentById xmlns="http://example.com/student"> <id>{id_aluno}</id> </GetStudentById> </soap:Body> </soap:Envelope>""" def consultar_aluno(id_aluno): if id_aluno in alunos: aluno = alunos[id_aluno] return f"""<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetStudentByIdResponse xmlns="http://example.com/student"> <student> <id>{id_aluno}</id> <name>{aluno["nome"]}</name> <course>{aluno["curso"]}</course> </student> </GetStudentByIdResponse> </soap:Body> </soap:Envelope>""" else: return f"""<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>Aluno com ID {id_aluno} não encontrado</faultstring> </soap:Fault> </soap:Body> </soap:Envelope>""" def processar_resposta_soap(resposta): namespaces = { "soap": "http://schemas.xmlsoap.org/soap/envelope/", "student": "http://example.com/student" } raiz = ET.fromstring(resposta) fault = raiz.find(".//soap:Fault", namespaces) if fault is not None: print("Erro SOAP:", fault.find("faultstring").text) else: id_aluno = raiz.find(".//student:id", namespaces).text nome = raiz.find(".//student:name", namespaces).text curso = raiz.find(".//student:course", namespaces).text print("Aluno encontrado:") print("ID:", id_aluno) print("Nome:", nome) print("Curso:", curso) id_digitado = int(input("Digite o ID do aluno: ")) requisicao = criar_requisicao_aluno(id_digitado) print("\nRequisição SOAP enviada:") print(requisicao) resposta = consultar_aluno(id_digitado) print("\nResposta SOAP recebida:") print(resposta) print("\nResultado processado:") processar_resposta_soap(resposta) ```
**Conceito:** Deve mencionar a comunicação entre sistemas heterogêneos/diferentes plataformas. **Função:** Resolver o acoplamento de linguagens, padronizando a forma como os serviços são chamados e entendidos.
SOA é um **estilo arquitetural** que organiza funcionalidades de negócio como serviços reutilizáveis, independentes e acessíveis por interfaces bem definidas. SOAP, por sua vez, é um **protocolo de comunicação** usado para troca de mensagens estruturadas, normalmente em XML, entre aplicações.
**Papel do WSDL:** É o contrato formal. Ele descreve as operações disponíveis (`<operation>`), os parâmetros de entrada (`<input>`) e os tipos de dados esperados, permitindo que o cliente gere *stubs* (código boilerplate). **Uso pelo Cliente:** O desenvolvedor usa o WSDL para gerar código automaticamente (usando ferramentas como `wsimport` ou similares), economizando tempo e garantindo que a chamada siga exatamente o contrato.
**a) Tipo de Erro:** Erro de validação de negócio (validação de limite diário). Não é erro de sistema, nem de autenticação. **b) Elemento com Detalhes Técnicos:** O elemento `<detail>` dentro do `<soap:Fault>` contém informações técnicas adicionais sobre o erro. **c) Uso Prático para Desenvolvedor:** 1. **Validação no Cliente:** Implementar verificação prévia de limite diário antes de enviar a requisição. 2. **Tratamento de Erros:** Criar tratamento específico para `INVALID_AMOUNT` com mensagem amigável ao usuário. **Explicação Pedagógica:** O aluno deve entender que o elemento `<detail>` é opcional mas útil para depuração, e que erros SOAP devem ser tratados programaticamente.