
kartter
Membros-
Total de itens
186 -
Registro em
-
Última visita
Sobre kartter

- Data de Nascimento 25/01/1983
Contatos
-
Website URL
http://
-
ICQ
64272740
Perfil
-
Gender
Male
-
Location
Belo Horizonte MG
Últimos Visitantes
21.025 visualizações
kartter's Achievements
0
Reputação
-
Carlos Giovani Deitos começou a seguir kartter
-
Boa Tarde Karter
Estou passando pelo problema que você relatou ano passado aqui no forum.
Refere-se ao WebServices em Delphi, na questão das estuturas que o SOAPUI não consegue entender.
No meu caso tenho um tipo Array of String que ao carregar o WSDL não tem cristo do SOAPEUI entender.
Você conseguiu resolver o problema ?
-
Bom, é como eu disse acima. Eu que estou fazendo o WebService. Se fizer um Webservice no Delphi, você cria as classes e ele cria o WSDL para publicação. Disse também que até mesmo o exemplo que o próprio delphi monta, não gera o wsdl corretamente. Não é possível ou pelo menos em nenhuma documentação embarcadero demonstra como colocar limites, conforme coloquei acima. Quando falo que ele não gera corretamente, é porque qualquer ferramenta que faz uso de um WSDL nativamente (SAP/SOAP), não conseguem interpretar o WSDL gerado pelo delphi, justamente pelo fato de não ser possível colocar limites (minOccurs="0" maxOccurs="1"), bem como a maneira como ele representa array.
-
Não tem nada a ver a maneira como estou enviando os dados Jhonas. A construção do webservice que não está correta. Vou mudar a pergunta. Tem idéia de como criar um webservice, onde um nodo possua limite? Acredito que isto resolva o problema. Exemplo: (minOccurs="0" maxOccurs="1") <xs:sequence> <xs:element name="Code" type="xs:int"> </xs:element> <xs:element name="Value" type="xs:string" minOccurs="0" maxOccurs="1"> </xs:element> <xs:element name="ped" type="tns:array_filho"> </xs:element> </xs:sequence>
-
O codigo que passou é a importação do WSDL que foi gerado incorreto. O problema está no WSDL publicado. Se criar um SOAP SERVER APPLICATION no Delphi, utilizando os métodos de exemplo que são inseridos, e mandar publicar, verá que até o exemplo gera um WSDL incorreto.
-
Boa noite, As diferenças são apenas no tipo. No Delphij 10.3 gerou os tipos como STRING. No seu exemplo gerou como WIDESTRING. Outra diferença se refere ao destroy. No restante é tudo igual destructor TPedido.Destroy; begin System.SysUtils.FreeAndNil(FData); System.SysUtils.FreeAndNil(Fitem); inherited Destroy; end; destructor TFinal.Destroy; var I: Integer; begin for I := 0 to System.Length(Fx)-1 do System.SysUtils.FreeAndNil(Fx[I]); System.SetLength(Fx, 0); inherited Destroy; end;
-
Segue endereço do WSDL http://35.247.246.18/wslh/ScriptBrasil.dll/wsdl/IiTeste Gerei o WSDL na versão Rio/Tokyo/Delphi 7. Todas geraram da mesma maneira. Obrigado
-
Bom dia @Jhonas Coloquei o codigo fonte e o wsdl no link: encurtador.com.br/fptx5 E um exemplo bem basico de um webservice. Veja no print abaixo, como o wsdl montado pelo delphi não tem nada a ver com a realidade. um nodo filho é montado de forma totalmente incorreta. A classe pedido tem dois campos: Código e Data A classe item tem dois campos: Nome e Filial Obrigado! Jean
-
Ei @Jhonas, bom dia, O problema não está no soapui e sim no wsdl gerado pelo delphi. Veja este exemplo de WSDL gerado por outra ferramenta. <xsd:element name="Deliveries" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Delivery" type="xsd:string"/> <xsd:element name="Country" type="xsd:string" minOccurs="0"/> <xsd:element name="Items" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Item" type="xsd:string"/> <xsd:element name="Material" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Partners" type="PartnersModel" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> Se gerar no Delphi, o WSDL é gerado da seguinte maneira: <sequence xmlns="http://www.w3.org/2001/XMLSchema"> <xs:element name="Delivery" type="xs:string"/> <xs:element name="Country" type="xs:string"/> <xs:element name="Items" type="ns1:Array_Of_Items"/> <xs:element name="Partners" type="ns1:Array_Of_PartnersModel"/> </sequence> Por este motivo dá erro no SOAPUI e em qualquer ferramenta que mapeie os campos de maneira padrão, como por exemplo no SAP. Obrigado pela ajuda! Jean
-
Boa noite, Estou fazendo um WebService em Delphi 10.3. Fiz e consegui importá-lo sem problemas. Quando mandei para o meu cliente, ele me informou que importou o WSDL no SOAPUI e a estrutura complexa não foi carregada. Realmente estas estruturas complexas não são carregadas no SOAP UI quando faço um WebService em Delphi. Porém se recebo um WSDL escrito em outra linguagem, estas estruturas são carregadas. Coloquei somente o básico da interface que fiz para que vocês possam me auxiliar. unit UInterfaceDelivery; interface uses Soap.InvokeRegistry,Soap.XSBuiltIns; Type Item = class(TRemotable) private FNome:string; published property nome: string read FNome write FNome; end; Array_Of_Items = array of Item; Deliveries = class(TRemotable) private FDelivery : string; FItems : Array_Of_Items; published property Delivery: string read FDelivery write FDelivery; property Items: Array_Of_Items read FItems write FItems; end; ContDeliveryModel = Deliveries; ContDeliveryModelRequest = type ContDeliveryModel; ContDeliveryModel_In_Sync_it = interface(IInvokable) ['{5EAA2E15-891D-4BA4-BEDD-BF2AEFEB11BF}'] function ContDeliveryModel_In_Sync(const ContDeliveryModelRequest: ContDeliveryModelRequest): boolean; stdcall; end; implementation initialization InvRegistry.RegisterInterface(TypeInfo(ContDeliveryModel_In_Sync_it)); end. Veja que a propriedade Items é um array da Classe Item Quando importo o WSDL abaixo no SOAP ele monta a estrutura conforme o segundo quadro <?xml version="1.0"?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="ContDeliveryModel_In_Sync_itservice" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns1="urn:UInterfaceDelivery"> <types> <xs:schema targetNamespace="urn:UInterfaceDelivery" xmlns="urn:UInterfaceDelivery"> <xs:complexType name="ContDeliveryModelRequest"> <sequence xmlns="http://www.w3.org/2001/XMLSchema"> <xs:element name="Delivery" type="xs:string"/> <xs:element name="Items" type="ns1:Array_Of_Items"/> </sequence> </xs:complexType> <xs:complexType name="Array_Of_Items"> <xs:complexContent> <xs:restriction base="soapenc:Array"> <sequence xmlns="http://www.w3.org/2001/XMLSchema"/> <xs:attribute ref="soapenc:arrayType" n1:arrayType="ns1:Item[]" xmlns:n1="http://schemas.xmlsoap.org/wsdl/"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="Item"> <sequence xmlns="http://www.w3.org/2001/XMLSchema"> <xs:element name="nome" type="xs:string"/> </sequence> </xs:complexType> </xs:schema> </types> <message name="ContDeliveryModel_In_Sync0Request"> <part name="ContDeliveryModelRequest" type="ns1:ContDeliveryModelRequest"/> </message> <message name="ContDeliveryModel_In_Sync0Response"> <part name="return" type="xs:boolean"/> </message> <portType name="ContDeliveryModel_In_Sync_it"> <operation name="ContDeliveryModel_In_Sync"> <input message="tns:ContDeliveryModel_In_Sync0Request"/> <output message="tns:ContDeliveryModel_In_Sync0Response"/> </operation> </portType> <binding name="ContDeliveryModel_In_Sync_itbinding" type="tns:ContDeliveryModel_In_Sync_it"> <binding xmlns="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="ContDeliveryModel_In_Sync"> <operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:UInterfaceDelivery-ContDeliveryModel_In_Sync_it#ContDeliveryModel_In_Sync" style="rpc"/> <input> <body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:UInterfaceDelivery-ContDeliveryModel_In_Sync_it"/> </input> <output> <body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:UInterfaceDelivery-ContDeliveryModel_In_Sync_it"/> </output> </operation> </binding> <service name="ContDeliveryModel_In_Sync_itservice"> <port name="ContDeliveryModel_In_Sync_itPort" binding="tns:ContDeliveryModel_In_Sync_itbinding"> <address xmlns="http://schemas.xmlsoap.org/wsdl/soap/" location="http://localhost/wsdl_lh/ServerLH.dll/soap/ContDeliveryModel_In_Sync_it"/> </port> </service> </definitions> Como a estrutura é montada no SOAP UI <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:UInterfaceDelivery-ContDeliveryModel_In_Sync_it" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <soapenv:Header/> <soapenv:Body> <urn:ContDeliveryModel_In_Sync soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <ContDeliveryModelRequest xsi:type="urn:ContDeliveryModelRequest" xmlns:urn="urn:UInterfaceDelivery"> <Delivery xsi:type="xsd:string">?</Delivery> <Items xsi:type="urn:Array_Of_Items" soapenc:arrayType="urn:Item[]"/> </ContDeliveryModelRequest> </urn:ContDeliveryModel_In_Sync> </soapenv:Body> </soapenv:Envelope> Então meu cliente indagou que a estrutura ITEM não foi carrega. Como faço para o SOAP UI importar este WSDL conforme abaixo, sabendo que o ITEM é um array?: <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:UInterfaceDelivery-ContDeliveryModel_In_Sync_it" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <soapenv:Header/> <soapenv:Body> <urn:ContDeliveryModel_In_Sync soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <ContDeliveryModelRequest xsi:type="urn:ContDeliveryModelRequest" xmlns:urn="urn:UInterfaceDelivery"> <Delivery xsi:type="xsd:string">?</Delivery> <Items xsi:type="urn:Items"> <nome xsi:type="xsd:string">?</nome> </Items> </ContDeliveryModelRequest> </urn:ContDeliveryModel_In_Sync> </soapenv:Body> </soapenv:Envelope> Obrigado pelo auxílio! Jean Carlos
-
Bom dia, Tem como eu executar o arquivo em anexo no windows? no cmd, digito train.py e recebo de retorno os comandos linus não reconhecidos no windows. 'rm' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes. Processing: ./br/input\lbr.brazil.exp0.box Executing: c: esseract/tesseract -l eng ./br/input/lbr.brazil.exp0.tif lbr.brazil.exp0 nobatch box.train.stderr 'mv' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes. 'mv' não é reconhecido como um comando interno O código do arquivo segue abaixo #!/usr/bin/python import os import glob import sys #TESSERACT_DIR='/storage/projects/alpr/libraries/tesseract-ocr' TESSERACT_DIR = 'c:\tesseract' os.environ["TESSDATA_PREFIX"] = TESSERACT_DIR #os.system("export TESSDATA_PREFIX=" + TESSERACT_DIR) TESSERACT_BIN=TESSERACT_DIR + '/tesseract' TESSERACT_TRAINDIR= TESSERACT_DIR + '/training' country = input("Two-Letter Country Code to Train: ").lower() LANGUAGE_NAME='l' + country box_files = glob.glob('./' + country + '/input/*.box') if not box_files: print ("Cannot find input files") sys.exit(1) os.system("rm ./tmp/*") #os.system("del ./tmp/*") font_properties_file = open('./tmp/font_properties','w') for box_file in box_files: print ("Processing: " + box_file) file_without_dir = os.path.split(box_file)[1] file_without_ext = os.path.splitext(file_without_dir)[0] input_dir = os.path.dirname(box_file) tif_file = input_dir + '/' + file_without_ext + ".tif" train_cmd = "%s -l eng %s %s nobatch box.train.stderr" % (TESSERACT_BIN, tif_file, file_without_ext) print ("Executing: " + train_cmd) os.system(train_cmd) os.system("mv ./" + file_without_ext + ".tr ./tmp/" + file_without_ext + ".tr") os.system("mv ./" + file_without_ext + ".txt ./tmp/" + file_without_ext + ".txt") font_name=file_without_dir.split('.')[1] font_properties_file.write(font_name + ' 0 0 1 0 0\n') font_properties_file.close() os.system(TESSERACT_TRAINDIR + "/unicharset_extractor ./" + country + "/input/*.box") #os.system('mv ./unicharset ./" + country + "/input/" + LANGUAGE_NAME + ".unicharset') # Shape clustering should currently only be used for the "indic" languages #train_cmd = TESSERACT_TRAINDIR + '/shapeclustering -F ./' + country + '/input/font_properties -U unicharset ./' + country + '/input/*.tr' #print "Executing: " + train_cmd #os.system(train_cmd) train_cmd = TESSERACT_TRAINDIR + '/mftraining -F ./tmp/font_properties -U unicharset -O ./tmp/' + LANGUAGE_NAME + '.unicharset ./tmp/*.tr' print ("Executing: " + train_cmd) os.system(train_cmd) os.system("rm ./unicharset") os.system("mv ./tmp/" + LANGUAGE_NAME + ".unicharset ./") os.system("cp ./" + country + "/input/unicharambigs ./" + LANGUAGE_NAME + ".unicharambigs") os.system(TESSERACT_TRAINDIR + '/cntraining ./tmp/*.tr') #os.system("mv ./unicharset ./" + LANGUAGE_NAME + ".unicharset") os.system("mv ./shapetable ./" + LANGUAGE_NAME + ".shapetable") #os.system("rm ./shapetable") os.system("mv ./pffmtable ./" + LANGUAGE_NAME + ".pffmtable") os.system("mv ./inttemp ./" + LANGUAGE_NAME + ".inttemp") os.system("mv ./normproto ./" + LANGUAGE_NAME + ".normproto") os.system(TESSERACT_TRAINDIR + '/combine_tessdata ' + LANGUAGE_NAME + '.') # If a config file is in the country's directory, use that. config_file = os.path.join('./', country, country + '.config') if os.path.isfile(config_file): print ("Applying config file: " + config_file) trainedata_file = LANGUAGE_NAME + '.traineddata' os.system(TESSERACT_TRAINDIR + '/combine_tessdata -o ' + trainedata_file + ' ' + config_file ) os.system("mv ./" + LANGUAGE_NAME + ".unicharset ./tmp/") os.system("mv ./" + LANGUAGE_NAME + ".shapetable ./tmp/") os.system("mv ./" + LANGUAGE_NAME + ".pffmtable ./tmp/") os.system("mv ./" + LANGUAGE_NAME + ".inttemp ./tmp/") os.system("mv ./" + LANGUAGE_NAME + ".normproto ./tmp/") os.system("mv ./" + LANGUAGE_NAME + ".unicharambigs ./tmp/")
-
Boa noite Pessoal, Estou com um painel de LED da empresa SPIDER para configurar mensagens nele. Estou conectando nele atraves do componente TCPCLIENT (paleta indy). No manual diz que: A programação do painel é formada por um conjunto de quadros de comunicação. O quadro de comunicação é formado pela seguinte string de caracteres: só STX DEST CMD NCHAR Bloco de Caracteres ETX BCC" só (01h) - Inicializa a comunicação. STX (02h) - Início de texto. DEST - Identifica qual painel receberá o quadro de comunicação (de 01h à 20h) . CMD - Comando que o painel deverá executar (82h ou 83h) NCHAR - Caracter que informa qual a quantidade de bytes contidos no Bloco de Caracteres. (Incluir os bytes relativos às funções de tela, mudança de cor, gráficos, mudança de caracter e qualquer outro contido neste bloco). OBS.:Número de caracteres não pode ser superior a 240. ETX (03h) - Caracter de fim de texto. BCC - Caracter de check: BCC é inicializado com zero e calcula-se a partir do caracter STX, inclusive, até o caracter ETX, inclusive, efetuando uma operação de XOR com shift-left. Sempre que transmitido um quadro de comunicação, o painel responderá ao dispositivo se entendeu ou não a mensagem, da seguinte forma: ACK (06) = mensagem recebida corretamente. NAK (15) = mensagem não recebida. Caso a resposta à transmissão de um quadro tenha sido NAK, o programa deverá retransmiti-lo. Como monto esta string no delphi?
-
Bom dia, Estou tentando ler o rss http://pox.globo.com/rss/g1/natureza/ Ele tem a TAG CDATA. Então quando quero ler o conteúdo desta TAG utilizo: ANodeImg :=ANode.ChildNodes['description']; ANodeImg :=ANodeImg.ChildNodes.FindNode('#cdata-section'); Só que a própria TAG description possui um conteúdo após o CDATA. <description> <![CDATA[ <img src="https://s2.glbimg.com/ANbwrwKUUSZJ1OMBmHLpBYBIfpU=/i.s3.glbimg.com/v1/AUTH_59edd422c0c84a879bd37670ae4f538a/internal_photos/bs/2017/7/F/USf33yQTG7JZX2fekUsg/temer1.jpg" /><br /> ]]> País escandinavo, que destinou R$ 2,8 bilhões entre 2009 e 2016 ao Brasil, manifestou insatisfação com recente alta do desmatamento e ameaça reduzir ou suspender contribuições. </description> Como faço para ler o texto: "País escandinavo, que destino...." Se eu fizer o comando abaixo retorna erro. ANode.ChildNodes['description'].text Se não possui o CDATA na TAG Description, o comando acima funciona sem problemas, porém com a TAG CDATA não consigo ler. Alguém sabe como resolver isto?
-
Boa noite, Utilizo o cxGrid da DevExpress. Este componente tem uma propriedade de sumary onde é possível mostrar o total de registros e o total de registros por grupo. O que preciso é que seja mostrado o total de grupos, e não consegui ainda. Exemplo: Funcionario 01 REGISTRO 01 DO FUNCIONARIO 01 REGISTRO 02 DO FUNCIONARIO 01 REGISTRO 03 DO FUNCIONARIO 01 Funcionario 02 REGISTRO 01 DO FUNCIONARIO 02 REGISTRO 02 DO FUNCIONARIO 02 Eu consigo mostrar no cxGrid o total de registros (04), consigo também mostrar que o funcionario 01 tem 3 registros e que o funcionário 02 tem 2 registros. O que quero é mostrar no cxgrid que tenho 02 funcionários. Obrigado
-
Ei Jhonas, A questão é que se eu transferir do meu pc de desenvolvimento, vai normalmente. Ele sai do evento. Se tento executar no computador do cliente, ele não sai. Se eu tirar o timeout não sai do evento. Se eu colocar timeout, a conexão expira. Estou com um notebook no cliente, então em relação a velocidade da internet, não pode ser, pois estou na mesma rede. Abraços
-
Boa noite! Uso o IDFTP como componente para realizar upload de arquivos. Acontece que se eu tento enviar arquivos de tamanho maior (+- 40 MB), ele processa normalmente, envia o arquivo tudo ok. Porém ela para no evento onWordEnd e não sai de maneira alguma. Se o arquivo for pequeno (+- 10 MB), não ocorre este erro. Na minha máquina de desenvolvimento, funcionar normal, porém no cliente, acontece o problema relatado acima. Alguém sabe se preciso atualizar ou colocar alguma dll no cliente, para que isto não ocorra.