Problema no retorno do SOAP validateColleagueLogin ECMColleagueService

Estou tentando usar um serviço SOAP mas o retorno está vindo errado. uso validateColleagueLogin do ECMColleagueService, passo os parâmetros errado propositalmente, para que me retorno que o login está incorreto ou não existe, mas sempre me retorna “ok”. Alguém sabe o que pode ser? (É um widget)

        $.ajax({
            url : '/WDGT_CatracaRefeitorio/resources/js/xmls/login.xml',
            async : false,
            type : "get",
            datatype : "xml",
            contentType: "text/xml; charset=utf-8",
            success : function(xml) {
                _xml = $(xml)
            }       
        });
        
        console.log("xml0: ")
        console.log(_xml[0]);

        // Usar o metodo WCMAPI.Create para chamar o webservice
        WCMAPI.Create({
            url : "/webdesk/ECMColleagueService?wsdl",
            contentType : "text/xml",
            dataType : "xml",
            contentType: "text/xml; charset=utf-8",
            data : _xml[0],
            success : function(data) {
                console.log("data: ")
                console.log(data);
            }
        }); 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.foundation.ecm.technology.totvs.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:validateColleagueLogin>
         <companyId>1</companyId>  
         <colleagueId>adasd</colleagueId>
         <password>adasd</password>       
      </ws:validateColleagueLogin>
   </soapenv:Body>
</soapenv:Envelope>```

Alguém sabe o que pode estar acontecendo?

Boa tarde @SamuelBruing ,

Dessa forma que você fez tentei simular e deu erro pra mim também.

Fiz de uma forma diferente então para sanar seu problema, segue abaixo:

  1. Crie um serviço, conforme imagem abaixo:

  1. Exporte o dataset abaixo:

ECMColleagueService-validateColleagueLogin.js (5,1,KB)

  1. Consuma em qualquer parte do fluig ( Front ou back-end):
var filtro = []
	filtro.push(DatasetFactory.createConstraint('password', 'xxxxx', '', ConstraintType.MUST));
	filtro.push(DatasetFactory.createConstraint('colleagueId', 'yyyyyy', '', ConstraintType.MUST));
	var ds = DatasetFactory.getDataset('ECMColleagueService-validateColleagueLogin', null, filtro, null);
	console.log("ds",ds);

Acho que com isso já te resolve o problema.

1 curtida

Opa, não estou conseguindo baixar o dataset, consegue disponibilizar o code dele?
mas desde já, valeu pela ajuda!!!

/**
@description Valida acesso
	@example
	var filtro = []
	filtro.push(DatasetFactory.createConstraint('password', 'xxxxx', '', ConstraintType.MUST));
	filtro.push(DatasetFactory.createConstraint('colleagueId', 'yyyyyy', '', ConstraintType.MUST));
	var ds = DatasetFactory.getDataset('ECMColleagueService-validateColleagueLogin', null, filtro, null);
	console.log("ds",ds);
*/

function createDataset(fields, constraints, sortFields) {
	try {
		log.log("####constraints#####1#####")
		log.dir(constraints)
		log.log("####constraints#####1#####")
		return processResult(callService(fields, constraints, sortFields));
	} catch(e) {
		return processErrorResult(e, constraints);
	}
}

function callService(fields, constraints, sortFields) {
	log.log("####constraints####2#####")
	log.dir(constraints)
	log.log("####constraints####2######")
	var serviceData = data(constraints);
	var params = serviceData.inputValues;
	var assigns = serviceData.inputAssignments;

	verifyConstraints(serviceData.inputValues, constraints);

	var serviceHelper = ServiceManager.getService(serviceData.fluigService);
	var serviceLocator = serviceHelper.instantiate(serviceData.locatorClass);
	var service = serviceLocator.getColleagueServicePort();
	var response = service.validateColleagueLogin(getParamValue(params.companyId, assigns.companyId), getParamValue(params.colleagueId, assigns.colleagueId), 
		getParamValue(params.password, assigns.password));

	return response;
}

function defineStructure() {
		addColumn('response');
}

function onSync(lastSyncDate) {
	var serviceData = data();
	var synchronizedDataset = DatasetBuilder.newDataset();

	try {
		var resultDataset = processResult(callService());
		if (resultDataset != null) {
			var values = resultDataset.getValues();
			for (var i = 0; i < values.length; i++) {
				synchronizedDataset.addRow(values[i]);
			}
		}

	} catch(e) {
		log.info('Dataset synchronization error : ' + e.message);

	}
	return synchronizedDataset;
}

function verifyConstraints(params, constraints) {
	if (constraints != null) {
		for (var i = 0; i < constraints.length; i++) {
			try {
				params[constraints[i].fieldName] = JSON.parse(constraints[i].initialValue);
			} catch(e) {
				params[constraints[i].fieldName] = constraints[i].initialValue;
			}
		}
	}
}

function processResult(result) {
	var dataset = DatasetBuilder.newDataset();

	dataset.addColumn("response");
	dataset.addRow([result]);

	return dataset;
}

function processErrorResult(error, constraints) {
	var dataset = DatasetBuilder.newDataset();

	var params = data().inputValues;
verifyConstraints(params, constraints);

dataset.addColumn('error');
	dataset.addColumn('companyId');
	dataset.addColumn('password');
	dataset.addColumn('colleagueId');

	var companyId = isPrimitive(params.companyId) ? params.companyId : JSONUtil.toJSON(params.companyId);
	var password = isPrimitive(params.password) ? params.password : JSONUtil.toJSON(params.password);
	var colleagueId = isPrimitive(params.colleagueId) ? params.colleagueId : JSONUtil.toJSON(params.colleagueId);

	dataset.addRow([error.message, companyId, password, colleagueId]);

	return dataset;
}

function getParamValue(param, assignment) {
	if (assignment == 'VARIABLE') {
		return getValue(param);
	} else if (assignment == 'NULL') {
		return null;
	}
	return param;
}

function hasValue(value) {
	return value !== null && value !== undefined;
}

function isPrimitive(value) {
	return ((typeof value === 'string') || value.substring !== undefined) || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'undefined';
}


function getObjectFactory(serviceHelper) {
	var objectFactory = serviceHelper.instantiate("com.totvs.technology.ecm.foundation.ws.ObjectFactory");

	return objectFactory;
}



function data(constraints) {
	log.log("####constraints##########")
	log.dir(constraints)
	log.log("####constraints##########")
	var password = "";
	var colleagueId = "";
	for (i = 0; i < constraints.length; i++){
		if (constraints[i].fieldName == "password"){
			password = new java.lang.String(constraints[i].initialValue);
		}else if (constraints[i].fieldName == "colleagueId"){
			colleagueId = new java.lang.String(constraints[i].initialValue);
		}   
	}
	return {
  "fluigService" : "ECMColleagueService",
  "operation" : "validateColleagueLogin",
  "soapService" : "ECMColleagueServiceService",
  "portType" : "ColleagueService",
  "locatorClass" : "com.totvs.technology.ecm.foundation.ws.ECMColleagueServiceService",
  "portTypeMethod" : "getColleagueServicePort",
  "parameters" : [ ],
  "inputValues" : {
    "companyId" : "WKCompany",
    "password" : password+"",
    "colleagueId" : colleagueId+""
  },
  "inputAssignments" : {
    "companyId" : "VARIABLE",
    "password" : "VALUE",
    "colleagueId" : "VALUE"
  },
  "outputValues" : { },
  "outputAssignments" : { },
  "extraParams" : {
    "enabled" : false
  }
}
}

 function stringToBoolean(param) {
	 if(typeof(param) === 'boolean') { 
		 return param; 
	 } 
	 if (param == null || param === 'null') { 
		 return false; 
	 } 
	 switch(param.toLowerCase().trim()) { 
		 case 'true': case 'yes': case '1': return true; 
		 case 'false': case 'no': case '0': case null: return false; 
		 default: return Boolean(param); 
	 } 
} 

Showwwww vou testar e retorno!

Opa Willian, testei aqui e obtive um erro. Verifiquei no log do fluig e foi esse aqui:

2021-07-19 07:50:54,563 ERROR [com.totvs.technology.foundation.dataservice.service.WebServiceProvider] (default task-327) Não foi possível iniciar a classe com.totvs.technology.ecm.foundation.ws.ECMColleagueServiceService do serviço ECMColleagueService: java.lang.InstantiationException: com.totvs.technology.ecm.foundation.ws.ECMColleagueServiceService

Sabe o que poderia ser? O retorno está sendo um objeto vazio

Bom dia Samuel, seu serviço esta criado correto ECMColleagueService?
Você criou agora o seu serviço?


O serviço ja estava criado, preciso criar novamente?

O Problema de estar criado é que podem ter alterado o endereço de acesso da classe pelo serviço.

Faz o seguinte para nao travar outros desenvolvimentos. Cria o serviço “ECMColleagueService2”.

E altera no dataset essa linha

image

coloca ECMColleagueService2

Criei, mas continua vindo o objeto vazio… qual deveria ser o retorno correto?

Verifiquei no log do serviço, e as requisições estão sendo feitas, mas o objeto vem vazio do retorno do dataset

Quando localiza retorna :

image

Quando não localiza ou nao consegue validar não retorna nada:

Opa, reiniciei o servidor, agora ta funcionando!!! Valeu demais Willian, resolveu o problema

1 curtida

Legal show, mas aquela outra forma que você fazia era pra ter pego.

Pois é, as requisições estavam funcionado, mas estava validando mesmo com o login ou a senha estando errados. Achei bem estranho

Este tópico foi fechado automaticamente 16 horas depois da úlima resposta. Novas respostas não são mais permitidas.